文件夹分区的Powershell脚本
Powershell script for folder's partition
我正在尝试创建一个脚本,该脚本将文件夹路径作为参数并显示具有该文件夹路径的分区的完整程度 (0-100%)。
在 Linux 中,我知道 df -T $directory
命令,但我找不到在 powershell 中执行此操作的任何方法。有什么建议吗?
您可以使用以下 Get-CIMINstance 调用来估算 df -T 的输出,该调用查询 WMI/CIM 您请求的信息。由于我不是 linux 专家,我不确定是什么让 df -t
成为一个特殊的命令。如果此输出未捕获您需要的内容,您能否提供更多信息?
Get-CimInstance Win32_logicaldisk | Select-Object SystemName,@{Name=‘Drive Letter‘;Expression={$_.DeviceID}},
@{Name=‘Drive Label’;Expression={$_.VolumeName}},`
@{Name=‘Size(MB)’;Expression={[int]($_.Size / 1MB)}},`
@{Name=‘FreeSpace%’;Expression={[math]::Round($_.FreeSpace / $_.Size,2)*100}} | ft
> SystemName Drive Letter Drive Label Size(MB) FreeSpace%
---------- ------------ ----------- -------- ----------
BEHEMOTH B: Aug 01 2014 172 0
BEHEMOTH C: 171353 10
BEHEMOTH D: Media 953867 20
BEHEMOTH E: Big Betty 2861459 88
BEHEMOTH H: VM 117726 37
BEHEMOTH T: 250 94
已更新
好的,我使用下面的代码创建了一个名为 df 的函数。您可以使用 -t 提供目录以获取该特定分区的统计信息。否则,如果 运行 没有参数,它将为我们提供当前磁盘的磁盘统计信息。
Function df {
Param
(
# Param1 help description
[Parameter(ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
[Alias("t")]
$directory = (get-item (get-location)))
if ($PSBoundParameters.Count -ne 0){$directory = dget-item $directory}
$root = $directory.Root.Name -replace '\','%'
Get-CimInstance Win32_logicaldisk -Filter ("DeviceID like '$root%'")| Select-Object SystemName,@{Name=‘Drive Letter‘;Expression={$_.DeviceID}},
@{Name=‘Drive Label’;Expression={$_.VolumeName}},`
@{Name=‘Size(MB)’;Expression={"{0:N0}" -f [int]($_.Size / 1MB)}},`
@{Name=‘FreeSpace%’;Expression={[math]::Round($_.FreeSpace / $_.Size,2)*100}} | ft
}
df -t .\SampleDir
>SystemName Drive Letter Drive Label Size(MB) FreeSpace%
---------- ------------ ----------- -------- ----------
DELLBOOK C: OSDisk 243,247 39
我正在尝试创建一个脚本,该脚本将文件夹路径作为参数并显示具有该文件夹路径的分区的完整程度 (0-100%)。
在 Linux 中,我知道 df -T $directory
命令,但我找不到在 powershell 中执行此操作的任何方法。有什么建议吗?
您可以使用以下 Get-CIMINstance 调用来估算 df -T 的输出,该调用查询 WMI/CIM 您请求的信息。由于我不是 linux 专家,我不确定是什么让 df -t
成为一个特殊的命令。如果此输出未捕获您需要的内容,您能否提供更多信息?
Get-CimInstance Win32_logicaldisk | Select-Object SystemName,@{Name=‘Drive Letter‘;Expression={$_.DeviceID}},
@{Name=‘Drive Label’;Expression={$_.VolumeName}},`
@{Name=‘Size(MB)’;Expression={[int]($_.Size / 1MB)}},`
@{Name=‘FreeSpace%’;Expression={[math]::Round($_.FreeSpace / $_.Size,2)*100}} | ft
> SystemName Drive Letter Drive Label Size(MB) FreeSpace%
---------- ------------ ----------- -------- ----------
BEHEMOTH B: Aug 01 2014 172 0
BEHEMOTH C: 171353 10
BEHEMOTH D: Media 953867 20
BEHEMOTH E: Big Betty 2861459 88
BEHEMOTH H: VM 117726 37
BEHEMOTH T: 250 94
已更新
好的,我使用下面的代码创建了一个名为 df 的函数。您可以使用 -t 提供目录以获取该特定分区的统计信息。否则,如果 运行 没有参数,它将为我们提供当前磁盘的磁盘统计信息。
Function df {
Param
(
# Param1 help description
[Parameter(ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
[Alias("t")]
$directory = (get-item (get-location)))
if ($PSBoundParameters.Count -ne 0){$directory = dget-item $directory}
$root = $directory.Root.Name -replace '\','%'
Get-CimInstance Win32_logicaldisk -Filter ("DeviceID like '$root%'")| Select-Object SystemName,@{Name=‘Drive Letter‘;Expression={$_.DeviceID}},
@{Name=‘Drive Label’;Expression={$_.VolumeName}},`
@{Name=‘Size(MB)’;Expression={"{0:N0}" -f [int]($_.Size / 1MB)}},`
@{Name=‘FreeSpace%’;Expression={[math]::Round($_.FreeSpace / $_.Size,2)*100}} | ft
}
df -t .\SampleDir
>SystemName Drive Letter Drive Label Size(MB) FreeSpace%
---------- ------------ ----------- -------- ----------
DELLBOOK C: OSDisk 243,247 39