gpt4 book ai didi

powershell - 为什么PsExec不能远程执行.ps1脚本?

转载 作者:行者123 更新时间:2023-12-02 23:58:28 51 4
gpt4 key购买 nike

我试图在PowerShell中编写一个脚本,该脚本收集C:驱动器上的可用空间,然后将其附加到网络驱动器上的.csv文件中。

默认情况下,我们公司未启用PowerShell。远程PowerShell命令受到限制。因此,我必须编写脚本,然后使用PsExec将它们启动。

我有两个用于此过程的脚本。第一个是我在计算机上运行的脚本,该脚本询问我的凭据,然后使用foreach循环遍历带有IP地址的.txt文件,告诉每个IP从网络驱动器启动第二个脚本。第二个脚本收集可用空间,在其上执行数学功能,然后将主机名和可用空间附加到网络上的.csv文件中。

但是,第二个脚本永远不会运行。使用PsExec建立连接后,我的控制台就坐在那里。它应该启动脚本,然后再次循环到下一个IP。我已经在一些目标计算机上手动测试了第二个脚本,没有任何问题。

本地执行的脚本:

$username = Read-Host "Username"

$outputPath = "\\network\directory\sub-directory\FileName.csv"
$IPpath = Read-Host "Enter the path for the list of IP addresses"
$IPs = Get-Content -Path $IPpath
Add-Content -Path $outputPath -Value """IP"",""Free Space"""

foreach ($IP in $IPs)
{
if (Test-Connection -Count 1 -ComputerName $IP -Quiet)
{
\\network\directory\subdirectory\psexec.exe -accepteula \\$IP -u domain\$username -h PowerShell -ExecutionPolicy Bypass -Command \\network\directory\sub-directory\diskSpaceCheck.ps1
}
else
{
Add-Content -Path $outputPath -Value """$IP"",""Offline"""
}
}

远程执行的脚本(diskSpaceCheck.ps1):
$outputPath = "\\network\directory\sub-directory\FreeSpace.csv"
$hostname = hostname

$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'"
$freeSpace = [System.Math]::Round((($disk.FreeSpace) / 1GB))
Add-Content -Path $outputPath -Value "$($hostname), $($freeSpace)"

我认为您也不能在foreach中包含if语句,但是我已经尝试了没有if测试的情况,并且得到了相同的结果。我不知道为什么远程计算机不会执行此脚本。我有另一个脚本被复制到这些计算机,然后以正确运行的相同方式执行。

而且,目标计算机被锁定以限制其仅用于特定目的。这些计算机使用通用的自动登录,通常可以访问一些应用程序。其他所有内容都无法访问,包括Windows资源管理器,控制面板等。我在办公室本地的一些计算机上测试了此脚本,并且运行良好。

我在想也许是网络延迟问题?这会影响PsExec或.ps1脚本吗?我可以远程访问计算机,注销,使用我的凭据登录并运行脚本,而PsExec只是在运行我给它的命令。

任何意见,将不胜感激。

最佳答案

如果您使用PSExec直接执行Ps1文件,则会发生这种情况。而是使用PSexec执行PowerShell.exe并将ps1文件作为参数传递。

还要检查以下问题:Run PowerShell on remote PC

关于powershell - 为什么PsExec不能远程执行.ps1脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36810213/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com