我编写了一个 Powershell 脚本,用于检查操作系统并进行一些安全扫描。我们从中运行此脚本的服务器是我系统的父域的成员。我需要从该服务器针对我的子域上的所有计算机运行此脚本。我在子域上创建了一个具有管理员权限的帐户,允许扫描子域上的所有计算机。该脚本使用 -ComputerName 和一个变量,该变量是一个列出要扫描的计算机的数组。
我在任务计划程序中设置了一项任务,定期运行此扫描。任务运行后启动脚本,没有任何问题。我已设置以最高权限级别运行脚本。对于任务的凭据,我将它放入了为扫描设置的子域的帐户中。
当我检查日志时,它说该帐户在没有本地管理权限的情况下运行。这就是让我困惑的地方。由于我创建和指定的帐户在父计算机上没有管理权限,但在子域计算机上有管理权限,这有关系吗?出于某种原因,当它针对子域上的每台计算机运行脚本时,它使用“COMPUTERNAME.LOCAL”而不是典型的“COMPUTER”。当我指定 -ComputerName 时,我应该为此使用 FQDN 吗?我也可以像这样从父域运行此脚本到子域,还是需要进行权限或配置更改?该脚本确实有一个名为“-AltCredential”的参数,它会弹出一个用于输入凭据的 UAC 框,但我不想硬编码密码,也不知道如何填写该框,因为它是一个自动脚本。
答案1
您可以使用 PowerShell 5 支持的 PowerShell Remoting。PowerShell Remoting 是一项允许您在远程计算机上运行 PowerShell 命令或脚本的功能。它依赖于 Windows 远程管理 (WinRM) 服务,该服务使用 WS-Management 协议进行通信。
- 首先,使用命令启用 powershell 远程处理
Enable-PSRemoting
。还要确保两个 dc 之间的 PowerShell 远程处理网络要求已到位。 - 然后设置允许的 TrustedHosts。例如
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "ClientComputer1,ClientComputer2" - Force
- 然后重新启动 WinRM 服务
Restart-Service WinRM
然后远程运行脚本如下:(
Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName childdc
您也可以在计算机名后面输入一个IP地址)
我想强调的另一件很酷的事情是,你可以使用 PowerShell Remoting 来打开远程 powershell 会话,使用命令Enter-PSSession