【发布时间】:2013-07-08 11:52:47
【问题描述】:
# ---------------------------------------------------------
# ScriptingGamesBeginnerEvent8_PS1.ps1
# ed wilson, msft 8/21/2009
# PS1 version of HSG-08-19-09 http://bit.ly/1d8Rww
#
# ---------------------------------------------------------
Param(
[string]$path = 'C:\',
[int]$first = 50
)# end param
# *** Function Here ***
function Get-DirSize ($path){
BEGIN {}
PROCESS{
$size = 0
$folders = @()
foreach ($file in (Get-ChildItem $path -Force -ea SilentlyContinue)) {
if ($file.PSIsContainer) {
$subfolders = @(Get-DirSize $file.FullName)
$size += $subfolders[-1].Size
$folders += $subfolders
} else {
$size += $file.Length
}
}
$object = New-Object -TypeName PSObject
$object | Add-Member -MemberType NoteProperty -Name Folder -Value (Get-Item $path).fullname
$object | Add-Member -MemberType NoteProperty -Name Size -Value $size
$folders += $object
Write-Output $folders
}
END {}
} # end function Get-DirSize
Function Get-FormattedNumber($size)
{
IF($size -ge 1GB)
{
"{0:n2}" -f ($size / 1GB) + " GigaBytes"
}
ELSEIF($size -ge 1MB)
{
"{0:n2}" -f ($size / 1MB) + " MegaBytes"
}
ELSE
{
"{0:n2}" -f ($size / 1KB) + " KiloBytes"
}
} #end function Get-FormattedNumber
# *** Entry Point to Script ***
if(-not(Test-Path -Path $path))
{
Write-Host -ForegroundColor red "Unable to locate $path"
Help $MyInvocation.InvocationName -full
exit
}
Get-DirSize -path $path |
Sort-Object -Property size -Descending |
Select-Object -Property folder, size -First $first |
Format-Table -Property Folder,
@{ Label="Size of Folder" ; Expression = {Get-FormattedNumber($_.size)} }
所以我得到了这个脚本 http://gallery.technet.microsoft.com/scriptcenter/36bf0988-867f-45be-92c0-f9b24bd766fb#content
我一直在使用它并创建了一个批处理文件来帮助处理该文件的日志输出等。但是,我注意到其中带有空格的路径不会被读取。例如 ..Documents\我的音乐
Get-Item : Could not find item C:\Users\MyUser\Documents\My Music.
At C:\test.ps1:32 char:80
+ $object | Add-Member -MemberType NoteProperty -Name Folder -Value (Get-It
em <<<< $path).fullname
+ CategoryInfo : ObjectNotFound: (C:\Users\MyUser\Documents\My
Music:String) [Get-Item], IOException
+ FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetIt
emCommand
在代码的 TechNet 页面上,有人提出了问题,但没有给出解决方案。我不知道如何在这里解决它。我玩过 $path 参数,用 " " 或 ' ' 等包围它。
这是执行它的批处理文件的一部分:
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -noe -command "& 'C:\test.ps1' -path "'C:\Users\MyUser\'""
【问题讨论】:
-
直接在 powershell 中运行会得到什么?喜欢
Get-DirSize "c:\Users\username\Saved Games" -
同样的事情 - 不被识别为 cmdlet 的名称...
-
@user2229804 “未识别为 cmdlet 的名称”如何与“找不到项目 C:\Users\MyUser\Documents\My Music.”相同??它们是两个不同的错误。您需要在控制台中加载函数 get-dirSize 才能调用它!!!
-
+1 表示@C.B 评论,或者只是从 powershell 控制台调用 c:\test\ScriptingGamesBeginnerEvent8_PS1.ps1 -path "you path with space"
-
如果出现有关空格本身的问题,您可以尝试在路径周围加上 single 引号。 (添加,因为这个问题首先通过谷歌弹出)
标签: windows string powershell path