Я никогда не использовал эту функцию напрямую, и, похоже, это «функция» безопасности, при которой вы не можете получить доступ к третьему компьютеру, используя адрес UNC, работая удаленно.Однако я смог найти обходной путь, который отлично сработал для меня.
Вместо того, чтобы пытаться напрямую вызывать адрес \\ server \ share, я динамически сопоставляю сетевой диск с машиной, которую пытаюсь запуститьсценарий к общему ресурсу на компьютере, на котором есть сценарий.(Запуск удаленно из A, подключите диск на B к общему ресурсу на C).Затем я вызываю свои сценарии через этот диск, и он работает как шарм.Эта строка - то, что я передаю вышеописанному методу RunRemoteScript:
"$net = new-object -ComObject WScript.Network;" +
"if(!($net.EnumNetworkDrives() -contains \"S:\"))" +
"{Write-Host \"S: Drive Not Currently Mapped. Mapping to \\\\" + RemoteServerC + "\\Share.\";" +
"$net.MapNetWorkDrive(\"S:\",\"\\\\" + RemoteServerC + "\\Share\",$false,\"username\",\"password\")};" +
"Get-PSDrive | Write-Verbose;" +
"& \"S:\\PathToScript\\Install.ps1\" -noPrompt;"
RemoteServerC - это передаваемая мной переменная, определенная в файле конфигурации пользователя.
Здесь тот же код, что ипросто сценарий powershell, если кому-то это нужно (замена RemoteServerC на переменную powershell, которую нужно установить до этого, или просто жесткий код:
$net = new-object -ComObject WScript.Network
if(!($net.EnumNetworkDrives() -contains "S:"))
{ Write-Host "S: Drive Not Currently Mapped. Mapping to \\remoteserverC\Share."
$net.MapNetWorkDrive("S:","\\remoteserverC\Share",$false,"username","password")
}
Get-PSDrive | Write-Verbose
& "S:\\PathToScript\\Install.ps1\" -noPrompt;"
Сначала я настроил объект, чтобы иметь возможность сопоставить диск. Затем япроверьте, есть ли уже подключенный диск "s" на удаленном компьютере. Если его нет, то сопоставьте общий ресурс с диском "s" на удаленном компьютере, используя имя и пароль, которые мы установили в активном каталоге для запуска этогоservice.
Я включил команду Get-PSDrive, потому что она, кажется, заставляет powershell перезагружать список доступных дисков. Кажется, это имеет значение только в первый раз, когда вы пытаетесь запустить это в сеансе powershell (и черезЯ не знаю, действительно ли это необходимо или нет, я включил его для безопасности). Очевидно, PowerShell не распознает диск иВ том же сеансе он был создан, если вы используете MapNetworkDrive.