次のスクリプトは、リモートサーバーにフォルダーを追加しません。代わりに、フォルダがマイマシンに配置されます。なぜそれを行うのですか?追加するための適切な構文は何ですか?
$setupFolder = "c:\SetupSoftwareAndFiles"
$stageSrvrs | ForEach-Object {
Write-Host "Opening Session on $_"
Enter-PSSession $_
Write-Host "Creating SetupSoftwareAndFiles Folder"
New-Item -Path $setupFolder -type directory -Force
Write-Host "Exiting Session"
Exit-PSSession
}
Enter-PSSessionは、対話型のリモート処理シナリオでのみ使用できます。スクリプトブロックの一部として使用することはできません。代わりに、Invoke-Commandを使用します。
$stageSvrs | %{
Invoke-Command -ComputerName $_ -ScriptBlock {
$setupFolder = "c:\SetupSoftwareAndFiles"
Write-Host "Creating SetupSoftwareAndFiles Folder"
New-Item -Path $setupFolder -type directory -Force
Write-Host "Folder creation complete"
}
}
UNCパスはNew-Itemでも機能します
$ComputerName = "fooComputer"
$DriveLetter = "D"
$Path = "fooPath"
New-Item -Path \\$ComputerName\$DriveLetter$\$Path -type directory -Force
-ScriptBlockが機能しない場合は、これを使用できます。
$c = Get-Credential -Credential
$s = $ExecutionContext.InvokeCommand.NewScriptBlock("mkdir c:\NewDir")
Invoke-Command -ComputerName PC01 -ScriptBlock $s -Credential $c
次のコードは、$server
で指定されたサーバー名を使用して、リモートサーバーに新しいフォルダーを作成します。以下のコードは、資格情報がMySecureCredentials
に格納され、事前に設定されていることを前提としています。単にcreateNewRemoteFolder "<Destination-Path>"
を呼び出して、新しいフォルダを作成します。
function createNewRemoteFolder($newFolderPath) {
$scriptStr = "New-Item -Path $newFolderPath -type directory -Force"
$scriptBlock = [scriptblock]::Create($scriptStr)
runScriptBlock $scriptBlock
}
function runScriptBlock($scriptBlock) {
Invoke-Command -ComputerName $server -Credential $MySecureCreds -ScriptBlock $scriptBlock
}