0

PS1 バッチ ファイル スクリプトにリモート サーバー認証を追加しようとしています。

だから私はこれを行うことができます:

Copy-Item  $src $destination -Credential $Creds

今のところスクリプトと同じディレクトリにあるパスワードファイルを作成しました。単にパスワード文字列が含まれています。

プロンプトを表示する行:

  Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File password.txt

Read-Host コマンドを削除すると、プロンプトが消え、スクリプトが期待どおりに実行されます。

質問 リモート サーバー認証を行う正​​しい方法は何ですか?

スクリプトのコンテキストでの新しいコードは次のとおりです。

[...]

  if(-not(Test-Path $destination)){mkdir $destination | out-null}

  Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File password.txt
  $PW = Get-Content password.txt | ConvertTo-Securestring
  $Creds = New-Object -Typename System.Management.Automation.PSCredential -Argumentlist "SERVER02\Administrator",$PW

ForEach ($sourcefile In $(Get-ChildItem $source | Where-Object { $_.Name -match "Daily_Reviews\[\d{1,12}-\d{1,12}\].journal" }))
{ 

      [...]

      Copy-Item  $src $destination -Credential $Creds

      [...]

}
4

1 に答える 1

1

マシン間でのパスワード ファイルの移植性について心配していない場合は、次のかなり安全な方法を使用できます。

# Capture once and store to file - DON'T PUT THIS PART IN YOUR SCRIPT
$passwd = Read-Host "Enter password" -AsSecureString
$encpwd = ConvertFrom-SecureString $passwd
$encpwd
$encpwd > $path\password.bin

# Later pull this in and restore to a secure string
$encpwd = Get-Content $path\password.bin
$passwd = ConvertTo-SecureString $encpwd

$cred = new-object System.Management.Automation.PSCredential 'john',$passwd
$cred

# NOTE: The "secret" required to rehyrdate correctly is stored in DPAPI - consequence:
#       You can only rehydrate on the same machine that did the ConvertFrom-SecureString

$passwd が正しいかどうかを確認するためにこれをデバッグする必要がある場合は、デバッグ中にこれを実行できます。

$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($passwd)
$str =  [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)
$str
于 2013-04-12T02:19:00.007 に答える