尽管是管理员,但仍拒绝访问localhost - PowerShell

时间:2016-04-06 13:59:33

标签: windows powershell localhost invoke-command


好的,所以这一直困扰着我一段时间,我现在尝试了太多的东西。

我试图运行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执行它。

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

如果您拥有本地管理权限,请以管理员身份运行powershell,并在没有Invoke-Command标志的情况下运行-Credential

如果您仅在本地运行脚本,则不需要Invoke-Command。你最好只运行脚本并将参数传递给它。

答案 1 :(得分:1)

帮助我的一个主题(我有一个类似的案例)是"如何为非行政用户提供远程服务"在About Remote Troubleshooting。基本上,它告诉您执行PS命令:Set-PSSessionConfiguration Microsoft.PowerShell -ShowSecurityDescriptorUI并向您尝试使用它的用户授予执行权限。

答案 2 :(得分:0)

好吧,如果我理解正确的话你就错了。

您提供的凭据用于访问localhost(您不需要BTW)。脚本仍然没有被执行。有两种解决方案:

  • 您需要提升powershell本身并执行脚本。
  • 您需要更改脚本,使其自身接受Credential参数并使用它来访问内容。在你展示剧本之前,我还没有什么可说的。

您可以使用以下命令提升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)

启用PSRemoting服务以自动启动

在主机和远程计算机上

Set-Service winrm -StartupType Automatic 
Start-Service winrm

启用PSREmoting

在主机和远程计算机上

EnablePSRemoting -Force

将计算机添加到受信任的主机

在远程计算机上

Set-Item wsman:\localhost\Client\TrustedHosts -Value "$(hostname),*$((Get-WmiObject Win32_ComputerSystem).Domain)"

在Powershell远程处理中启用多跳

确定允许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

参考

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_remote_troubleshooting?view=powershell-6