好的,所以这一直困扰着我一段时间,我现在尝试了太多的东西。
我试图运行PowerShell脚本 - 我的用户帐户是域中的常规帐户,但它是我计算机上的本地管理员。因此,我创建了一个PowerShell脚本,提示我输入凭据(我输入域管理员帐户的凭据)以用于调用需要此域管理员提升的另一个脚本。
这个脚本如下所示:
Invoke-Command -FilePath "C:\Temp\script.ps1" -ComputerName localhost -Credential Get-Credential
此处script.ps1
是需要域管理员提升的脚本
执行显示的脚本会导致提示凭据,然后出现以下错误:
[localhost] Connecting to remote server localhost failed with the following error message : Access is denied.
我尝试过使用.bat文件,如下所示:
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%script.ps1 PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%PowerShellScriptPath%""' -Verb RunAs}";
此外,但我无法使其正常工作 - 它不会将脚本提升到域管理员级别。
最后,我需要提一下,如果我使用域管理员提升打开PowerShell,我希望使用域提升运行的脚本可以工作,导航到C:\ Temp \ script.ps1并通过。\ script.ps1执行它。
有什么建议吗?
答案 0 :(得分:1)
如果您拥有本地管理权限,请以管理员身份运行powershell,并在没有Invoke-Command
标志的情况下运行-Credential
。
如果您仅在本地运行脚本,则不需要Invoke-Command
。你最好只运行脚本并将参数传递给它。
答案 1 :(得分:1)
帮助我的一个主题(我有一个类似的案例)是"如何为非行政用户提供远程服务"在About Remote Troubleshooting。基本上,它告诉您执行PS命令:Set-PSSessionConfiguration Microsoft.PowerShell -ShowSecurityDescriptorUI并向您尝试使用它的用户授予执行权限。
答案 2 :(得分:0)
好吧,如果我理解正确的话你就错了。
您提供的凭据用于访问localhost(您不需要BTW)。脚本仍然没有被执行。有两种解决方案:
您可以使用以下命令提升shell:
start powershell -verb Runas
这里的问题是,除非您禁用UAC,否则它会提示您。不幸的是,我知道并没有简单的方法。一种可靠的方法是将脚本添加到任务计划程序并将任务设置为运行提升,然后运行它并删除任务。所有这些都可以自动化。这是UAC系统的不幸设计的结果(Linux上的sudo用于相同的目的将缓存响应一段时间,以便后续命令不会提示)。这将是:
schtasks /Create /TN runner ... /TR powershell -File script.ps1 /RU username /RP password /RL HIGHEST
schtasks /run runner
schtasks /delete runner
答案 3 :(得分:0)
在主机和远程计算机上
Set-Service winrm -StartupType Automatic
Start-Service winrm
在主机和远程计算机上
EnablePSRemoting -Force
在远程计算机上
Set-Item wsman:\localhost\Client\TrustedHosts -Value "$(hostname),*$((Get-WmiObject Win32_ComputerSystem).Domain)"
确定允许Creds通过的主机
Enable-WSManCredSSP –Role Client –DelegateComputer "$(hostname),*$((Get-WmiObject Win32_ComputerSystem).Domain)"
在源计算机上。
Enable-WSManCredSSP –Role Server
在主机上
$Cred = [System.Management.Automation.PSCredential]::new("<username>",$("<Password>" | ConvertTo-SecureString -AsPlainText -Force))
invoke-command -ComputerName localhost -ScriptBlock {Write-Host $args[0]} -ArgumentList "Hello!, It Works" -Authentication Credssp -Credential $cred