Tôi muốn tính toán các byte được gửi và nhận bởi một quá trình cụ thể. Tôi muốn sử dụng PowerShell cho điều đó. Tôi có thể làm gì đó bằng cách sử dụng Resource Monitor-> Network Activity. Làm thế nào tôi có thể làm điều đó bằng cách sử dụng get-counter?Cách sử dụng mạng của quy trình sử dụng Powershell
Trả lời
Có một bài viết Scripting Guy thực sự tốt về cách sử dụng Get-Counter
cmdlet ở đây:
Bí quyết sẽ được tìm quầy mà bạn cần, và tôi không nghĩ rằng bạn có thể nhận được các chi tiết bạn sau khi đây là những quầy mà PerfMon sử dụng. Nó tập trung nhiều hơn vào toàn bộ Giao diện mạng hơn là xung quanh các quy trình riêng lẻ sử dụng giao diện. Với điều đó nói rằng, nếu đó là điều duy nhất sử dụng giao diện nhất định, nó sẽ làm các trick độc đáo.
Có xem xét các tùy chọn giao diện mạng sẵn sàng cho một sự khởi đầu:
(get-counter -list "Network Interface").paths
Bạn không có thể, nó có vẻ. Tôi hoàn toàn không thể tìm thấy các quầy giám sát hiệu suất được đọc từ, mặc dù những người khác có thể kêu vang. Có thể có một số cách khác hơn so với truy cập quá, nhưng đó là những gì bạn yêu cầu cụ thể.
Nhìn qua các bộ đếm, điều gần nhất bạn sẽ tìm thấy là các bộ đếm "IO Đọc Bytes/giây" và "IO ghi byte/giây" trên đối tượng quy trình.
Vấn đề với chúng là chúng tính nhiều hơn là hoạt động mạng. Mô tả trong perfmon cho biết:
"Bộ đếm này tính tất cả hoạt động I/O được tạo bởi quá trình bao gồm tệp, mạng và thiết bị I/O".
Điều đó đang được nói, nếu bạn biết rằng quá trình bạn muốn giám sát chỉ hoặc chủ yếu ghi vào kết nối mạng, điều này có thể tốt hơn là không đo bất cứ điều gì cả.
Bạn muốn đi về nó như thế này (Tôi sẽ sử dụng Chrome làm ví dụ vì nó thuận tiện đang chạy và sử dụng dữ liệu ngay bây giờ):
get-counter "\Process(chrome*)\IO Read Bytes/sec"
này sẽ chỉ cung cấp cho bạn đọc một lần . Nếu bạn muốn tiếp tục đọc, bạn có thể thêm công tắc liên tục.
Đối tượng PerformanceCounterSampleSet được trả về không thực sự đẹp, nhưng bạn có thể tìm đọc thực tế trong $ obj.countersamples.cookedvalue.
Danh sách sẽ khá dài (nếu bạn duyệt như tôi). Chrome đang chạy trong nhiều quy trình riêng biệt, vì vậy, chúng tôi sẽ thực hiện một chút toán để làm cho chúng được thêm vào và được trình bày bằng KB.
kết quả cuối cùng:
get-counter "\Process(chrome*)\IO Read Bytes/sec" -Continuous | foreach {
[math]::round((($_.countersamples.cookedvalue | measure -sum).sum/1KB), 2)
}
Chạy này sẽ chỉ liên tục sản lượng đọc bao nhiêu KB/s Chrome đang sử dụng.
Thử nhìn vào lệnh ghép ngắn 'Get-Counter ' – Syddraf