2017-07-17 17 views
0

これまでに定義した-Computername $Serverを使用してPSSessionを入力しようとしていますが、これが機能しないようです。ComputerNameの変数付きPSSessionを入力してください

私は、変数のまわりに一重引用符、二重引用符、および全く引用符を使用しませんでした。私は間違って何をしていますか?私たちは、リモートコンピュータとの対話型セッションを作成するためのPSSessionを入力して使用

$Servers = Import-Csv "C:\Users\username\Desktop\DNS.csv" 
$secpass = ConvertTo-SecureString 'mypassword' -AsPlainText -Force 
$myCred = New-Object System.Management.Automation.PSCredential("username", $secpass) 

foreach ($Object in $Servers) { 
    $Server = $Object.Name 

    Enter-PSSession -ComputerName "$Server" -Credential $myCred 
    sl HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters 
    Invoke-Command -ScriptBlock {Get-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters} 
    Exit-PSSession 
} 

enter image description here

+0

ない引用符または二重引用符は問題ないはずです、何の置換は行われません一重引用符を使用するので、ここでは動作しません。詳細については、[about_quoting_rules](https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_quoting_rules)を参照してください。接続しようとしているサーバーで[リモーティングを有効にする](https://technet.microsoft.com/en-us/library/ff700227.aspx)していますか? –

+0

はい、すべてのサーバーでリモート処理が有効になっています –

答えて

1

あなたの場合、リモートシステムとやり取りする必要はありません。 csvファイルに存在するリモートシステムから詳細を取得するだけで済みます。これに代えので

、:

foreach($Object in $Servers) { 

$Server = $Object.Name 

Enter-PSSession -ComputerName "$Server" -Credential $myCred 

    sl HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters 

     Invoke-Command -ScriptBlock {Get-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters} 

Exit-PSSession 

} 

は、次の操作を行います。

foreach($Object in $Servers) 
{ 
$Server = $Object.Name 
Invoke-Command -ComputerName $Server -ScriptBlock {Get-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters} -Credential $myCred 
} 

注:私はあなたがPSRemotingを有効にしているし、信頼できるホストを編集していると信じています。あなたは完全にforeachループを廃止し、にあなたのコードを簡素化することができるように

+0

これは現在実行されていますが、リモートの代わりにローカルのレジストリから情報を返しています。 –

+0

いいえ。 $ Serverに入ってくる値をチェックすることができます。もう一度修正してみましょう。 –

+0

@ 4c74356b41:私は、リモートシステムから情報を取得するために、彼はインタラクティブなPSSessionを作成する必要がないということを意味しました。非対話型のリモートセッションで十分です。 –

0

Invoke-CommandComputerName paramはサーバーのアレイを受け入れます:

$Servers = Import-Csv "C:\Users\username\Desktop\DNS.csv" | Select-Object -ExpandProperty Name 
$secpass = ConvertTo-SecureString 'mypassword' -AsPlainText -Force 
$myCred = New-Object System.Management.Automation.PSCredential("username", $secpass) 

Invoke-Command -ComputerName $Servers -ScriptBlock {Get-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\NetBT\Parameters} -Credential $myCred 
+0

これは簡単に聞こえます。しかし、それはまだリモートの代わりにローカルマシンから引っ張っています。 –

+0

あなたはその結果をどうやって得ているのかよく分かりません。 'HKLM:\ SYSTEM \ CurrentControlSet \ Control \ ComputerName \ ActiveComputerName'にパスを変更してみてください。これには、あなたが実際にあなたが思っていることを二重にチェックするコンピュータ名が含まれています。 –