Windows + Powershell: Làm cách nào để thay đổi ái lực của Bộ xử lý cho tất cả các phiên bản java.exe?


0

Dựa trên câu hỏi này tại StackOverflow, tôi có thể thay đổi mối quan hệ của bộ xử lý nếu một tệp thực thi chỉ chạy trong 1 thể hiện với lệnh này:

PowerShell "$Process = Get-Process java; $Process.ProcessorAffinity=11"

Nếu 2 hoặc nhiều phiên bản đang chạy, tôi không thể thay đổi và đây là đầu ra

C:\PowerShell "$Process = Get-Process java; $Process.ProcessorAffinity=11"
The property 'ProcessorAffinity' cannot be found on this object. Verify that the property exists and can be set.
At line:1 char:30
+ $Process = Get-Process java; $Process.ProcessorAffinity=11
+                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException

Có ai biết làm thế nào để thay đổi mối quan hệ bộ xử lý cho tất cả các phiên bản java.exe bằng Powershell không?


1
Điều gì xảy ra nếu bạn thay đổi lệnh của bạn thành sau đây? PowerShell "$Process = Get-Process java | % { $_.ProcessorAffinity=11 }"
SimonS

1
Đây là một giải pháp tao nhã và nên được đăng lên như một câu trả lời. Các biến cũng có thể được gỡ bỏ Get-Process java | % { $_.ProcessorAffinity=15 },.
root

Câu trả lời:


3

Bạn phải lặp qua từng đối tượng để đặt ProcessorAffinity

| % {}trong PowerShell có nghĩa ForEach-Objectvà về cơ bản giống như một foreach()tuyên bố trong các ngôn ngữ khác

như root đã nói, bạn có thể loại bỏ biến để mã của bạn ngắn hơn.

từ cửa sổ cmd:

PowerShell "get-process java | % { $_.ProcessorAffinity=11 }"

trong một tệp bó (tệp bó xử lý %như một biến, vì vậy bạn cần viết nó 2 lần hoặc chuyển sang foreach):

PowerShell "get-process java | %% { $_.ProcessorAffinity=11 }"
PowerShell "get-process java | foreach { $_.ProcessorAffinity=11 }"

trực tiếp trong PowerShell:

get-process java | % { $_.ProcessorAffinity=11 }

Hoàn toàn thành công! Làm việc như người ở. Và cảm ơn bạn đã giải thích về | % {}, đó là những gì tôi cần.
adamitj

Chỉ cần chỉnh sửa: Khi gọi từ bên trong tệp bó, dấu phần trăm phải được nhân đôi:PowerShell "get-process java | %% { $_.ProcessorAffinity=11 }"
adamitj

@adamitj bạn có chắc không? điều đó sẽ không có ý nghĩa gì cả, vì bạn sẽ tăng gấp đôi Foreach-Object. Nếu tôi chạy nó với %%một lỗi. với %nó hoạt động.
SimonS

Vâng chắc chắn. Một dấu phần trăm duy nhất bên trong tệp bó được dự định để tham chiếu một đối số được truyền ra bên ngoài (gọi từ OS hoặc từ cmd.exe) như trong% 1,% 2 hoặc tham chiếu một biến môi trường khác như% tmp%, v.v. Nếu tôi muốn in một ký hiệu phần trăm với tiếng vang, ví dụ, tôi cần phảiecho %%
adamitj

@adamitj bạn nói đúng! tập tin bat không hoạt động giống như cửa sổ cmd. Tôi sẽ cập nhật câu trả lời của mình
SimonS
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.