我对powershell很新,所以如果我发现这一切都错了,我也不会感到惊讶.我正在尝试创建一个函数,在执行时,打印格式化为表格的结果.也许甚至可以将这些结果传递给另一个函数进行进一步分析.
这是我到目前为止所拥有的.这是一个简单的函数,它遍历路径列表并收集目录的名称和该目录中的项目数,将数据放入哈希表中,并返回一个哈希表数组:
function Check-Paths(){
$paths =
"C:\code\DirA",
"C:\code\DirB"
$dirs = @()
foreach ($path in $paths){
if (Test-Path $path){
$len = (ls -path $path).length
}
else{
$len = 0
}
$dirName = ($path -split "\\")[-1]
$dirInfo = @{DirName = $dirName; NumItems = $len}
$dirs += $dirInfo
}
return $dirs
}
Run Code Online (Sandbox Code Playgroud)
这看起来很简单.但是,当我运行命令时,这就是我得到的:
PS > Check-Paths
Name Value
---- -----
DirName DirA
NumItems 0
DirName DirB
NumItems 0
Run Code Online (Sandbox Code Playgroud)
我想要的是这个:
DirName NumItems
------- --------
DirA 0
DirB 0
Run Code Online (Sandbox Code Playgroud)
我可以破解我的功能来使用一个write声明,但我认为必须有一个更好的方法来做到这一点.有没有办法将数据格式化为表格,如果可以将其传递给另一种方法,那就更好了吗?
Mik*_*ard 10
如何使用
return new-object psobject -Property $dirs
Run Code Online (Sandbox Code Playgroud)
这将返回一个对象,其属性与哈希表中的项匹配.然后,您可以使用内置的PowerShell格式化cmdlet使其看起来像您想要的那样.由于您只有2个属性,因此默认情况下它将被格式化为表格.
编辑:这是整个事情的样子(在各种建议之后):
function Check-Paths(){
$paths =
"C:\code\DirA",
"C:\code\DirB"
$dirs = @()
foreach ($path in $paths){
if (Test-Path $path){
$len = (ls -path $path).length
}
else{
$len = 0
}
$dirName = ($path -split "\\")[-1]
new-object psobject -property @{DirName = $dirName; NumItems = $len}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12631 次 |
| 最近记录: |