Я пытаюсь написать сценарий в PowerShell, который собирает свободное место на диске C: и затем добавляет его в CSV-файл на сетевом диске.Почему PsExec не будет выполнять сценарий .ps1 удаленно?
Наша компания не имеет разрешения PowerShell по умолчанию. Команды Remote PowerShell ограничены. Из-за этого мне приходится записывать вещи, а затем пинать их с помощью PsExec.
У меня есть два сценария для этого процесса. Первый из них - это тот, который я запускаю с моей машины, этот скрипт запрашивает мои учетные данные, а затем использует цикл foreach для циклического перехода через .txt-файл с IP-адресами, в которых каждый 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)"
Я не думаю, что вы можете иметь, если заявление внутри Еогеасп также, но я имею попробовал его без теста 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 получить размер, freespace, подпись. – oiad462