PDA

Показать полную графическую версию : [решено] invoke-command ошибка авторизации


Loki3D
16-11-2022, 19:19
На Computer1 выполняю скрипт.


$RS=new-pssession -computername 'Computer2'
invoke-command -session $RS -ScriptBlock {
Get-ChildItem -Path '\\Computer3\c$\tmp'
}


на выходе получаю ошибку.

Access is denied
+ CategoryInfo : PermissionDenied: (\\Computer3\C$\tmp:String) [Get-ChildItem], UnauthorizedAccessException
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand
+ PSComputerName : Computer2

Cannot find path '\\--\C$\BASE\TEST8\SERVER\AdminToolKit\Server' because it does not exist.
+ CategoryInfo : ObjectNotFound: (\\Computer3\C$\tmp:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
+ PSComputerName : Computer2


Учетная запись, под которой выполняется скрипт имеет права локального администратора на всех трех машинах.
Путь существует, и доступен.

пробовал добавлять авторизацию - не помогает.

$RS=new-pssession -computername 'Computer2' -Credential $myCred


Буду раз услышать любые версии и предложения :)

DJ Mogarych
16-11-2022, 19:45
Попробуйте так:

invoke-command -computername 'Computer2' -ScriptBlock {
Get-ChildItem -Path '\\Computer3\c$\tmp'
}

Loki3D
16-11-2022, 20:58
DJ Mogarych, к сожалению, та же самая ошибка

Foreigner
17-11-2022, 00:29
А путь точно должен быть в таком виде? Если вы открыли сессию, значит вы уже оказались в окружении 'Computer2'. Попробуйте с обычными путями:


$RS=new-pssession -computername 'Computer2'
invoke-command -session $RS -ScriptBlock { Get-ChildItem -Path 'C:\tmp'}

Loki3D
17-11-2022, 10:45
Foreigner, К сожалению для моей задачи требуется удаленый вызов кода на Computer2, где требуется обращение к файлам на Computer3

YuS_2
17-11-2022, 14:28
Буду раз услышать любые версии и предложения »
Чтобы запускать команды на удаленной машине, надо быть уверенным, что все необходимые условия выполнены...
Перед выполнением Invoke-Command команд на удаленном компьютере прочитайте about_Remote (https://learn.microsoft.com/ru-ru/powershell/module/microsoft.powershell.core/about/about_remote?view=powershell-7.3).
Ну и здесь (https://winitpro.ru/index.php/2020/07/27/powershell-invoke-command-zapuska-komand-na-udalennyx-kompyuterax/) ещё есть подробные инструкции...

Loki3D
17-11-2022, 19:43
Я нашел решение.
Гуглится по PowerShell Second-Hop и Enable-WSMaCredSSP
Причина ошибки доступа изложена Здесь (https://learn.microsoft.com/en-us/previous-versions/technet-magazine/jj853299(v=msdn.10)?redirectedfrom=MSDN).
По соображениям безопаности Вашы учетные данные не наследуются и не делегируются при обращении с удаленной машины к другой удаленной машине.
Мой случай и его решение описаны Здесь (https://devblogs.microsoft.com/scripting/enable-powershell-second-hop-functionality-with-credssp/)

Важно в открытии сесси обязательно передавать учетные данные и указать метод авторизации.

В итоге на Computer1 выполняем

Enable-WSManCredSSP -Role Client -DelegateComputer 'Computer2', 'Computer3' -Force


На Computer2 и Computer3
выплоняем

Enable-WSManCredSSP -Role Server -Force



$Pas=ConvertTo-SecureString 'password' -AsPlainText -Force
$cred=New-Object System.Management.Automation.PSCredential ('MyLogin', $Pas)

$RS=new-pssession -computername 'Computer2' -Credential $cred -Authentication Credssp
invoke-command -session $RS -ScriptBlock {
Get-ChildItem -Path '\\Computer3\c$\tmp'
}




© OSzone.net 2001-2012