管理员权限下访问本地主机被拒绝-PowerShell

3


好的,这个问题困扰了我一段时间,我已经尝试了太多方法。

我正在尝试运行一个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执行它,我想要使用域提升运行的脚本可以正常工作。

有什么建议吗?


如果你只是想在本地机器上执行脚本,为什么要使用invoke-command呢?你可以直接在powershell主机中运行脚本并传递参数。 - Chris Kuperstein
4个回答

2

我曾经遇到过类似的情况,帮助我的一个主题是在远程故障排除中的“如何为非管理员用户启用远程”的部分。基本上,它告诉你执行一个PS命令:Set-PSSessionConfiguration Microsoft.PowerShell -ShowSecurityDescriptorUI,并授予你正在尝试使用它的用户执行权限。


1
如果您拥有本地管理员权限,请以管理员身份运行powershell并运行Invoke-Command而不使用-Credential标志。
如果您只是在本地运行脚本,则不需要Invoke-Command。最好直接运行脚本并将参数传递给它。

本地管理员权限不够,我需要域管理员的权限。 - zniwalla
将域管理员添加为本地管理员,运行 PowerShell 时以其他用户身份运行(按住 Shift 右键,在上下文菜单中获取“以其他用户身份运行…”),输入 DA 凭据,然后运行您的脚本。在我的工作中,我经常使用我的多个管理帐户来处理 Exchange、AD 和域本地管理员帐户。 - Chris Kuperstein
Invoke-Command有一个-AsJob参数,使其成为非阻塞式的,并且一些脚本可以在不同的系统上运行,包括本地主机。 - Brain2000

1

启用PSRemoting服务以自动启动

在主机和远程计算机上都需要进行操作

Set-Service winrm -StartupType Automatic 
Start-Service winrm

启用PS远程功能

在主机和远程计算机上都需要进行以下操作。

EnablePSRemoting -Force

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

在远程计算机上进行以下操作:

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

启用PowerShell远程多跳

确定允许传递凭据的主机

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://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_remote_troubleshooting?view=powershell-6


0

如果我理解正确的话,你做错了。

你提供的凭据用于访问本地主机(顺便说一下,你不需要这个)。脚本仍然以非管理员身份执行。有两种解决方案:

  • 你需要提升 PowerShell 本身的权限并执行脚本。
  • 你需要更改脚本,使其自己接受凭据参数并使用它来访问内容。在你展示脚本之前,我无法再多说什么。

你可以通过以下方式提升 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

我已经尝试了你提供的第一个解决方案,但我无法找到自动化该过程的方法。它需要以域管理员身份运行,而不是本地管理员。 该脚本正在创建一个用户并修改一些其他AD和Exchange内容,这是一个保留给域管理员的任务,我的本地管理员无法访问。 - zniwalla
好的,我尝试这样做:schtasks /Create /TN createUser /TR "powershell -File script.ps1" /RU domain\user /RP /RL HIGHEST /SC MONTHLY,但似乎脚本没有执行。当我运行任务时,cmd输出了以下内容:SUCCESS: Attempted to run the scheduled task "createUser". - zniwalla
我所做的就是在CMD输出那个消息。 - zniwalla
完全没有启动 - 转录中没有任何内容。但是,当我在域管理员提升的PowerShell中运行脚本时,转录中会有输出。 - zniwalla
尝试使用任务计划程序手动调整它。 - majkinetor
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接