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
}