Powershell 调用脚本块 - 通过进程检查而不仅仅是文本
Powershell Invoke script block - pass proccess check not just text
我怎样才能得到:(有效)
$Procname = 'notepad'
Invoke-Command -ComputerName sandbox -ScriptBlock {
if ((Get-Process | Where-Object {$_.Name -eq $Procname}) -eq $null) {
Write-Host 'null' -ForegroundColor Red
} else {
Write-Host running -ForegroundColor Green
}
}
也太像了吧? (没有工作)
$Procname = 'notepad'
$chk = (Get-Process | Where-Object {$_.Name -eq $Procname})
Invoke-Command -ComputerName sandbox -ScriptBlock {
if ($chk -eq $null) {
Write-Host 'null' -ForegroundColor Red
} else {
Write-Host running -ForegroundColor Green
}
}
我遇到的问题是获取进程 |从脚本块外部到 运行 的对象,我可以从脚本块外部(即 $Procname)传递文本 OK 但我正在尝试传递命令,我需要做什么特殊的事情?
我问过叔叔google,但我觉得我问错了
我也尝试将 $chk 作为参数和参数,但它们对我不起作用
好的,看来您想知道如何通过 Invoke-Command
在远程执行中引用局部变量。完全可以用 $using:
上下文做的事情。例如,要让您的脚本查看记事本是否在您的计算机上 运行,然后在远程系统上引用这些结果,您可以这样做:
$Procname = 'notepad'
$chk = (Get-Process | Where-Object {$_.Name -eq $Procname})
Invoke-Command -ComputerName sandbox -ScriptBlock {
if ($using:chk -eq $null) {
Write-Host 'null' -ForegroundColor Red
} else {
Write-Host 'running' -ForegroundColor Green
}
}
同样,如果您想查看记事本是否在远程服务器上 运行,您可以这样做:
$Procname = 'notepad'
Invoke-Command -ComputerName sandbox -ScriptBlock {
if ((Get-Process | Where-Object {$_.Name -eq $using:Procname}) -eq $null) {
Write-Host 'null' -ForegroundColor Red
} else {
Write-Host 'running' -ForegroundColor Green
}
}
但我个人认为这很难阅读,我会倒过来做:
$Procname = 'notepad'
Invoke-Command -ComputerName sandbox -ScriptBlock {
if (Get-Process | Where-Object {$_.Name -eq $using:Procname}) {
Write-Host 'running' -ForegroundColor Green
} else {
Write-Host 'null' -ForegroundColor Red
}
}
或者不直接在远程服务器上 运行 任何东西:
$Procname = 'notepad'
$chk = Get-Process -Computer sandbox | ?{$_.Name -eq $Procname}
If($chk){
Write-Host 'Running' -ForegroundColor Green
}else{
Write-Host 'Null' -ForegroundColor Red
}
我怎样才能得到:(有效)
$Procname = 'notepad'
Invoke-Command -ComputerName sandbox -ScriptBlock {
if ((Get-Process | Where-Object {$_.Name -eq $Procname}) -eq $null) {
Write-Host 'null' -ForegroundColor Red
} else {
Write-Host running -ForegroundColor Green
}
}
也太像了吧? (没有工作)
$Procname = 'notepad'
$chk = (Get-Process | Where-Object {$_.Name -eq $Procname})
Invoke-Command -ComputerName sandbox -ScriptBlock {
if ($chk -eq $null) {
Write-Host 'null' -ForegroundColor Red
} else {
Write-Host running -ForegroundColor Green
}
}
我遇到的问题是获取进程 |从脚本块外部到 运行 的对象,我可以从脚本块外部(即 $Procname)传递文本 OK 但我正在尝试传递命令,我需要做什么特殊的事情?
我问过叔叔google,但我觉得我问错了
我也尝试将 $chk 作为参数和参数,但它们对我不起作用
好的,看来您想知道如何通过 Invoke-Command
在远程执行中引用局部变量。完全可以用 $using:
上下文做的事情。例如,要让您的脚本查看记事本是否在您的计算机上 运行,然后在远程系统上引用这些结果,您可以这样做:
$Procname = 'notepad'
$chk = (Get-Process | Where-Object {$_.Name -eq $Procname})
Invoke-Command -ComputerName sandbox -ScriptBlock {
if ($using:chk -eq $null) {
Write-Host 'null' -ForegroundColor Red
} else {
Write-Host 'running' -ForegroundColor Green
}
}
同样,如果您想查看记事本是否在远程服务器上 运行,您可以这样做:
$Procname = 'notepad'
Invoke-Command -ComputerName sandbox -ScriptBlock {
if ((Get-Process | Where-Object {$_.Name -eq $using:Procname}) -eq $null) {
Write-Host 'null' -ForegroundColor Red
} else {
Write-Host 'running' -ForegroundColor Green
}
}
但我个人认为这很难阅读,我会倒过来做:
$Procname = 'notepad'
Invoke-Command -ComputerName sandbox -ScriptBlock {
if (Get-Process | Where-Object {$_.Name -eq $using:Procname}) {
Write-Host 'running' -ForegroundColor Green
} else {
Write-Host 'null' -ForegroundColor Red
}
}
或者不直接在远程服务器上 运行 任何东西:
$Procname = 'notepad'
$chk = Get-Process -Computer sandbox | ?{$_.Name -eq $Procname}
If($chk){
Write-Host 'Running' -ForegroundColor Green
}else{
Write-Host 'Null' -ForegroundColor Red
}