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

}

4 ответов


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 path также работает с 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
}