2016-07-25 36 views
0

現在Powershell ISEでPowerShellスクリプトを作成していますが、これは私たちがホスティングしているすべてのサーバーを入力し、サーバーActiveDirectoryからすべてのユーザーを取得するために使用されます。これを行うには、すべてのサーバーに自動的に接続する必要があります(多くのサーバーがありますが、アクセスする必要があるのは42台のみです)。私がこれまで行ってきたことと実際の問題が何であるかを説明しましょう。enter-pssessionにパスワードを自動的に入力する

あなたは知っているように多くの異なるサーバーがあるので、同僚が作ったExcelファイルからすべてのサーバーIP:S/Usernames/Passwordsを読んでアレイに配置しなければなりませんでした。

そこから、我々はこのように見ているループのために作ら:

for ($S = 0; $ -le $ServerAdressArray.Length; $S++) 
{ 

    if ($ServerAdressArray[$S] -like '192.168.*.10') 
    { 
     GetData($S) 
    } 

} 

それがローカルIPアドレスを見つけた場合、それは、配列からすべてのローカルIP-なアドレスはをフィルタ配列を通過しているん何、それは現時点では、このように見えるのGetData関数を実行します:私はそれが何をしたいのか

function GetData([int]$arg1) 
{ 
    Enter-PSsession -ComputerName $ServerAdressArray[$arg1] -Credential $UsernamesArray[$arg1] $PasswordArray[$arg1] 
} 

は、それが上のローカルIP-住所を発見した行番号を使用して、正しいを見つけるために、その番号を使用することですその特定のサーバーにログインするためのユーザー名とパスワード。

問題は、私はのパスワードをすべてのサーバに入力する必要があるということです。そして、Enter-PSSessionと同じ行に入力したいだけです。

さらに詳しい情報が必要な場合は、お知らせください。また、私はこのタイプのスクリプティングに慣れていないので、寒い場合はあなたの説明にできるだけ基本的になるようにしてください:)

ありがとう。

答えて

2

「クレデンシャル」パラメータをどのように渡しているかが問題です。これは、PSCredentialタイプである必要があります。ご例えば

New-Object PSCredential -ArgumentList @("a", ("p"|ConvertTo-SecureString -AsPlainText -Force)) 

あなたが直接資格情報オブジェクトを作成することができ、あなたのファイルにクリアテキストでユーザー名とパスワードを保存したと仮定すると、しかし

Enter-PSsession -ComputerName $ServerAdressArray[$arg1] -Credential (New-object PSCredential -ArgumentList @($UsernamesArray[$arg1], ($PasswordArray[$arg1]|ConvertTo-secureString -AsPlainText -Force))) 

を。セッションを開始したくない場合は、代わりにInvoke-commandを使用することをお勧めします。

など。

Invoke-command -ComputerName $ServerAdressArray[$arg1] -Credential (New-object PSCredential -ArgumentList @($UsernamesArray[$arg1], ($PasswordArray[$arg1]|ConvertTo-secureString -AsPlainText -Force))) -Scriptblock $scriptblockToExecute 
0

こんにちはCmdrTchort/Richard(:P)。答えてくれてありがとう!

セキュリティ上の理由から、郵便受け内のすべてのパスワードは暗号化されています。私は現在、パスワードを使用する前にパスワードを解読する機能に取り組んでいます。

私はインターネット上でより多くのビットを中心に見てきたし、私はこの記事に出くわし

Using PowerShell credentials without being prompted for a password

私はイェルーンLandheerが言ったことをしようとした機能は次のようになります。

function GetData(int[$arg1]) 
{ 
    $secstr = New-Object -TypeName System.Security.Securestring 
    $PasswordArray[$arg1].ToCharArray() | ForEach-Object {$secstr.AppendChar($_)} 
    $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr 

    $session = new-pssession -computername $ServerAdressArray[$arg1] -credential $UserNameArray[$arg1] $PasswordArray[$arg1] 
} 

プロンプトが表示され、パスワードが自動的に入力されず、プロンプトが閉じると表示されます。

New-PSSession:引数 '(encryptedpassword)'を受け入れる位置パラメータが見つかりません。 Cで :\ XXXXXXX \ XXXXX \ XXXXXX \ superfile.ps1:109文字:16 + ... $セッション=新しい-PSSessionは-computername $ ServerAdressArray [$ ARG1] -cr ... + ~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~ + CategoryInfo:InvalidArgument:(:) [新-PSSessionコマンド]、ParameterBindingException + FullyQualifiedErrorId:PositionalParameterNotFound、Microsoft.PowerShell.Commands.NewPSSessionCommand

が、私は位置パラメータのいくつかの種類を入力する必要がありますか、それは今動作しませんその暗号化された?

+0

'-credential $ cred' –

+0

動作しません。Mathias – tTim

+0

リモートサーバーに接続できません:アクセスが拒否されました。 – tTim

関連する問題