Powershell Использование сеанса Invoke-Command для получения размеров Get-Childitem на удаленном компьютере
Я пытаюсь использовать powershell для удаленного доступа к компьютеру и получения размера каждого подкаталога папки.
Я использую скрипт для получения папок любого размера, и он успешно работает:
$log = "F:\logfile.txt"
$startFolder = "C:\"
$colItems = Get-ChildItem $startFolder | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object
foreach ($i in $colItems){
$itemSum = Get-ChildItem ("$startFolder\" + $i.Name) -recurse | Measure-Object -property length -sum
"$startFolder\$i -- " + "{0:N2}" -f ($itemSum.sum / 1MB) + " MB" >> $log
}
Вот как я пытался включить его, используя Invoke-Command, и он не дал результатов.
#login info
$username = "domain\user"
$password = 'password'
$log = "C:\logfile.txt"
$startFolder = "comp-name\e"
#setup login credentials
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr
$session = new-pssession "comp-name" -Credential $cred
Invoke-Command -Session $session -ScriptBlock {$colItems = Get-ChildItem $startFolder | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object
foreach ($i in $colItems){
$itemSum = Get-ChildItem ("$startFolder\" + $i.Name) -recurse | Measure-Object -property length -sum
"$startFolder\$i -- " + "{0:N2}" -f ($itemSum.sum / 1GB) + " GB" >> $log
}
}
Я уже сделал шаг включения PS-удаленного взаимодействия на обоих компьютерах.
Заранее спасибо за помощь!
1 ответ
Переменная $startFolder
должен быть передан в блок скриптов, например:
Invoke-Command -Session $session -ScriptBlock {param($path,$log)
$colItems = Get-ChildItem $path | Where-Object {$_.PSIsContainer} | Sort-Object
foreach ($i in $colItems) {
$itemSum = Get-ChildItem "$path\$($i.Name)" -recurse | Measure-Object -property length -sum
"$startFolder\$i -- " + "{0:N2}" -f ($itemSum.sum / 1GB) + " GB" >> $log
}
} -Arg $startFolder,$logFilePath
Мне удалось получить это работает (без перенаправления в файл журнала):
23# Invoke-Command acme -ScriptBlock {param($path)
>>> $colItems = Get-ChildItem $path | Where-Object {$_.PSIsContainer} | Sort-Object
>>> foreach ($i in $colItems) {
>>> $itemSum = Get-ChildItem $i.FullName -recurse | Measure-Object -property length -sum
>>> "$startFolder\$i -- " + "{0:N2}" -f ($itemSum.sum / 1MB) + " MB"
>>> }
>>> } -Arg c:\bin
>>>
\Orca -- 3.63 MB
\Reg -- 0.06 MB
\Src -- 0.25 MB
\sym -- 19.09 MB
\x64 -- 0.71 MB