我对这些行有一些问题:
Invoke-Command -ComputerName $computerObject.Name -ScriptBlock {'{0:0.00}' -f ((Get-ChildItem $path -Recurse | Measure-Object -Property Length -sum).sum)}
我一无所获。但如果我使用的是$path
,c:\users\pa27dd7n\documents
,则输出为21830841828,00
$path.gettype()
的回复是:
name:string basetype: system.object
当前代码:
$computers = Get-ADComputer -SearchBase "OU=......" -filter "*" -Properties name,description,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion | sort-object description
$ADUsers = Get-ADUser -Filter * -SearchBase "OU=........" | Where-Object {$PSItem.enabled -eq "True"} | Sort-Object name
我将该属性添加到计算机以保持为计算机登录正确的用户:
$computers | foreach {Add-Member -InputObject $PSItem -NotePropertyName MainUserSamAccountName -NotePropertyValue "" -Force}
从$ADUsers
我正在登录我需要的用户。
当我得到所有东西时:
$computerObject = $computers.Get($a)
- 在循环中
所以,当我登录时:
$path = "c:\users\$computerObject.MainUserSamAccountName\documents"
这样我就得到了目录用户文档的路径。
答案 0 :(得分:0)
如果未定义路径,PowerShell将在当前目录上运行Get-ChildItem,因此如果在远程系统上运行它,它将在默认目录中执行(管理用户为C:\ windows \ system32,或者用户执行用户的个人资料。)
但是我注意到你正在使用-f操作符,这会导致人们烧伤。
我不喜欢使用字符串-format运算符,因为语法对我来说太不透明了,人们很难支持。如果您真正喜欢的是报告目录名称和所有项目的大小,我宁愿建议发送一个对象,如本示例所示。
Invoke-Command -ComputerName $computerObject.Name -ScriptBlock {
[pscustomobject]@{DirectoryName=(Get-location).Path;
Size=((Get-ChildItem $path -Recurse | Measure-Object -Property Length -sum).sum)/1MB -as [int]}
结果
DirectoryName Size
------------- ----
C:\Users\Stephen 16756
我继续前进并除以1MB以减少返回的数字长度,然后再作为整数进行整理。希望这能带你走向正确的方向!