2016-08-04 18 views
0

CredSSPが有効な場合、リモートマシンのリストをチェックしようとしています。スクリプトがマシンに接続し、コマンドを実行するとき。それは偽を返すことに終わります。 RDP経由で同じマシンに接続して同じコマンドを実行すると、trueを返します。ここにスクリプトがあります:CredSSPがPowershellでリモートで有効になっていることを確認してください

foreach ($server in $servers.Split(",").Trim()) { 
    $pw = ConvertTo-SecureString 'password' -AsPlainText -Force 
    $cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentList "Domain\user", $pw 
    $session = New-PSSession -ComputerName $server -Credential $cred 

    $output = (Get-Item WSMan:\localhost\Service\Auth\CredSSP).value 

    Write-Host $server : $output 

    Remove-PSSession -Session $session 
} 

これについての洞察はありますか?

答えて

1

あなたはGet-Itemをリモートで実行していません。

試してみてください。

$ServerList = $servers.Split(",").Trim(); 
$pw = ConvertTo-SecureString 'password' -AsPlainText -Force; 
$cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentList "Domain\user", $pw; 

Invoke-Command -ComputerName $ServerList -Credential $cred -ScriptBlock { Get-Item WSMan:\localhost\Service\Auth\CredSSP; } | 
    Select-Object PSComputerName, Value; 

代わりInvoke-Command -ComputerName $ServerListInvoke-Command -Session $sessionを使用することができますが、手でセッションを作成し、削除の周りにループと混乱を作成する必要はありません。

+0

ありがとう、これは参考になりました。私はまだPSにはかなり新しいです。だから私が間違っている場合は私を修正するが、これらのセッションコールでGet-Itemをラップすることによって、本質的に何もしていないのですか?ローカルで実行していただけですか?セッションで同じことを達成する方法はありますか?私はこのスクリプトを拡張するかもしれないし、それははるかに大きくなります。 – Anthony

+0

@Anthonyはい、それは正確です。それはローカルで実行されていました。 Invoke-Commandでセッションを使用できますが、これは通常、複数の異なるスクリプトブロックを実行する必要があるか、セッション状態をリモートで維持する必要がある、より複雑な状況に適しています。私はそれが長い間それを必要としている何かを書いたとは思わない。しかし、それは動作します。 –

関連する問題