我正在尝试在PowerShell中编写一个脚本,该脚本收集C:驱动器上的可用空间,然后将其附加到网络驱动器上的.csv文件中。为什么PsExec不能远程执行.ps1脚本?
我们公司没有默认启用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测试,并得到相同的结果。我无法弄清楚为什么远程机器不会执行这个脚本。我有另一个脚本复制到这些机器,然后以正确工作的相同方式执行。
此外,目标机器被锁定以限制其仅用于特定目的。这些机器使用通用的自动登录,并且通常可以访问一些应用程序。其他一切都无法访问,包括Windows资源管理器,控制面板等。我在我办公室的一些本地机器上测试了这个脚本,并且它工作正常。
我在想也许是一个网络延迟问题?这会影响PsExec或.ps1脚本吗?我可以远程登录机器,注销,使用我的凭证登录并运行脚本,而PsExec只需运行我提供的命令即可。
任何意见,将不胜感激。
我得到PowerShell远程处理未启用,但您可以远程使用WMI吗? 'Get-WmiObject Win32_LogicalDisk -Filter“DeviceID ='C:'”-ComputerName $ server' – Matt
不,它失败,访问被拒绝0x80070005。我可以使用psexec \\ IP -u domain \ username -h wmic logicaldisk获取大小,可用空间,标题。 – oiad462