在powershell中,我可以使用
启动一个进程$app_name = "app.exe"
$app_arguments = "arg0"
Start-Process $app_name $app_arguments
我尝试用
设置亲和力$app = Start-Process $app_name $app_arguments
$app.ProcessorAffinity = 0x3
....没有工作。
在windows powershell中,当我启动一个进程时如何设置亲和力?
答案 0 :(得分:3)
我可以用
解决$app_name = "app.exe"
$app_arguments = "arg0"
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = $app_name
$pinfo.Arguments = $app_arguments
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start()
$p.ProcessorAffinity=0x3
答案 1 :(得分:0)
我错过了DOS start
命令,因此我将@ JuanPablo的代码合并到一个名为PSstart.ps1
的shell脚本中,您可以使用它替换PowerShell中的start
命令。
只需使用 PowerShell -file PSStart.ps1 -affinity <affinity> -priority <priority> <path to executable> <executable arguments>
享受吧!
param([Int32]$affinity=0xF,[String]$priority="NORMAL", [String]$appPath="", [String]$appArguments="")
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") # For message box error reports, remove if you don't want popup errors
$priorityValues = "LOW", "NORMAL", "HIGH", "REALTIME", "ABOVENORMAL", "BELOWNORMAL" # Remove ABOVENORMAL and BELOWNORMAL if running on Win98 or WinME
$priorityUC = $priority.ToUpper()
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
If($appPath -ne "" -and (Test-Path $appPath))
{
If($priorityValues -contains $priorityUC)
{
Try
{
$pinfo.FileName = $appPath
$pinfo.Arguments = $app_arguments
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start()
$p.PriorityClass=$priorityUC
$p.ProcessorAffinity=$affinity
}
Catch
{
$exceptionMessage = $_.Exception.Message
#Write-Host "An exception:`n`n$exceptionMessage`n`noccured!" -fore white -back red # Uncomment for console errors
[System.Windows.Forms.MessageBox]::Show("An exception:`n`n$exceptionMessage`n`noccured!", "An Exception Occured", "Ok", "Error");
Break
}
}
Else
{
#Write-Host "The priority: `"$priorityUC`" is not a valid priority value!" -fore white -back red # Uncomment for console errors
[System.Windows.Forms.MessageBox]::Show("The priority: `"$priorityUC`" is not a valid priority value!", "A Priority Error Occured", "Ok", "Error");
}
}
Else
{
#Write-Host "The application path: `"$appPath`" doesn't exist!", "A Path Error Occured" -fore white -back red # Uncomment for console errors
[System.Windows.Forms.MessageBox]::Show("The application path: `"$appPath`" doesn't exist!", "A Path Error Occured", "Ok", "Error");
}
答案 2 :(得分:0)
您需要传递-PassThru开关才能获取过程对象
$app = Start-Process $app_name $app_arguments -PassThru
$app.ProcessorAffinity = 0x3
根据powershell Start-Process command (from ps 3.0)
-PassThru为cmdlet启动的每个进程返回一个进程对象。默认情况下,此cmdlet不会生成任何输出。