尝试使用powershell测试PSSession
Enter-PSSession -ComputerName <servername>
Invoke-Command -ComputerName <servername> -ScripBlock {
Get-PSDrive -PSProvider FileSystem | %{ write-host 'Checking drive ' $_.Root; set-location $_.Root; Get-ChildItem -Filter "load4.wav" -Recurse; write-host 'Checked drive ' $_.Root; } | Out-File "$env:UserProfile\Desktop\$env:ComputerName-Results.txt"
}
我最终希望能够针对服务器列表运行此操作并保存在本地保存结果
因此,当我运行时,它将进入PSSession
[server]: PS C:\Users\US_Chris.Ondrovic\Documents>
但不会执行这部分代码
Invoke-Command -ComputerName server -ScripBlock {
Get-PSDrive -PSProvider FileSystem | %{ write-host 'Checking drive ' $_.Root; set-location $_.Root; Get-ChildItem -Filter "load4.wav" -Recurse; write-host 'Checked drive ' $_.Root; } | Out-File "$env:UserProfile\Desktop\$env:ComputerName-Results.txt"
}
所以我可以验证它的工作原理就像在远程机器上一样
Invoke-Command -ComputerName <server> -ScriptBlock {Get-Service} | Out-File $env:Userprofile\Desktop\Test.txt
了解了一些有效的方法,现在它通过PSSession运行但是没有找到我需要的东西
function Remote-Search() {
param([string[]]$Servers, [string]$Item)
foreach($server in $Servers) {
Invoke-Command -ComputerName $server -ScriptBlock {Get-PSDrive -PSProvider FileSystem | %{ write-host 'Checking drive ' $_.Root; set-location $_.Root; Get-ChildItem -Filter $item -Recurse; write-host 'Checked drive ' $_.Root; }} | Out-File $env:Userprofile\Desktop\$server-results-$item.txt
}
}
答案 0 :(得分:1)
function Remote-Search() {
param([string[]]$Servers, [string]$Item)
foreach($server in $Servers) {
Invoke-Command -ComputerName $server -ArgumentList $Item -ScriptBlock { param([string]$filter)
Get-PSDrive -PSProvider FileSystem | %{
write-host 'Checking drive ' $_.Root
set-location $_.Root
Get-ChildItem -Filter $filter -Recurse
write-host 'Checked drive ' $_.Root
}
} | Out-File $env:Userprofile\Desktop\$server-results-$item.txt
}
}
脚本中的变量不能直接用于脚本块。您可以在脚本块中声明参数,然后通过-ArgumentList
的{{1}}参数将值传递给它们。
所以在这里,我已经在脚本块中添加了Invoke-Command
参数,并通过$filter
$Item
-ArgumentList
参数传递了Invoke-Command
。现在,在远程计算机上的脚本块中,$filter
将具有该值。
答案 1 :(得分:0)
Invoke-Command -ComputerName server -ScripBlock {
Get-PSDrive -PSProvider FileSystem | %{ write-host 'Checking drive ' $_.Root; set-location $_.Root; Get-ChildItem -Filter "load4.wav" -Recurse; write-host 'Checked drive ' $_.Root; } | Out-File "$env:UserProfile\Desktop\$env:ComputerName-Results.txt"
}
假设这是逐字复制的,您在-ScriptBlock