web-dev-qa-db-ja.com

PowerShellはリモートサーバーにフォルダーを作成します

次のスクリプトは、リモートサーバーにフォルダーを追加しません。代わりに、フォルダがマイマシンに配置されます。なぜそれを行うのですか?追加するための適切な構文は何ですか?

$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

}
11
ChiliYago

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"
         }
}
16
ravikanth

UNCパスはNew-Itemでも機能します

$ComputerName = "fooComputer"
$DriveLetter = "D"
$Path = "fooPath"
New-Item -Path \\$ComputerName\$DriveLetter$\$Path -type directory -Force 
15
Barry MSIH

-ScriptBlockが機能しない場合は、これを使用できます。

$c = Get-Credential -Credential 
$s = $ExecutionContext.InvokeCommand.NewScriptBlock("mkdir c:\NewDir")
Invoke-Command -ComputerName PC01 -ScriptBlock $s -Credential $c
1
Mark Varnas

次のコードは、$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
}
0
Jared