Powershell PSSession无效

时间:2014-08-06 12:23:02

标签: powershell

尝试使用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
    }
}

2 个答案:

答案 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

中缺少“t”