Захватить вывод cmd, запустить удаленно от имени другого пользователя на Windows - PullRequest
0 голосов
/ 05 мая 2020

Попытка запустить сценарий PowerShell с использованием WinRM

# $cred is valid and works for common PowerShell cmdlets

script = """
Start-Process ping.exe -Credential $cred -NoNewWindow -Wait -RedirectStandardOutput out.txt
Get-Content out.txt
"""
session = winrm.Session(host, auth=(user,passwd), transport="credssp')
result = s.run_ps(script)

Если -Credentials не используется, результат возвращается.

В противном случае создается пустой файл out.txt. Как перенаправить вывод в out.txt / stdout?

1 Ответ

1 голос
/ 06 мая 2020

Вы не можете сделать это с помощью PowerShell изначально. Это правильная граница безопасности Windows. PowerShell всегда будет запускаться в контексте пользователя, запустившего код.

Для этого вам необходимо использовать внешний инструмент, например MS SysInternals PSExe c ...

# Example:
# Using PsExec to Run Command on Remote Computer
psexec \\RemotePCName [-u username[-p password]] command [arguments]

psexec \\lon-srv01 powershell -ExecutionPolicy RemoteSigned -command "'{0:N2}' -f ((gci C:\PS | measure Length -Sum).Sum/1MB)"

... или используйте запланированное задание для запуска кода при входе в систему или в другой момент дня.

Не используйте Credssp, если у вас нет другого выбора нет.

Случайный саботаж: остерегайтесь CredSSP: https://www.powershellmagazine.com/2014/03/06/accidental-sabotage-beware-of-credssp/

Перенаправление PowerShell все еще привязано к пользовательская сессия. Тем не менее, взгляните на этот Stackoverflow Q&A:

Перенаправить STDOUT \ STDERR в текущую оболочку из win32_process create на удаленном компьютере

...