PowerShell でリモートWMI接続エラー 0x80070005 の解決法? (HDD容量ログ出力)

参考にしたサイトをなくしてしまいました!

Format-Table を使っていたけれど、Add-Contentで使えないので削除し、文字列フォーマットを適当に使って Add-Contentを使う様にしました。

Format-Table ○○ | Add-Content

で何故できないのだろうか・・・

ちなみに

Format-Table ○○ | Out-File

なら出力されるけど、文字化けがひどく

-Encoding

指定でエラーになるため、面倒なので書き換えをやめました。


1.ログイン認証情報の保存する。

$root = Split-Path $MyInvocation.MyCommand.Path
$file = "○○ネットワークサーバ.pass"
$path = Join-Path $root $file

$servers = @()
$servers += "192.168.0.1"
$servers += "192.168.0.2"
$servers += "192.168.0.3"

$credential = Get-Credential
$credential.Password | ConvertFrom-SecureString | Set-Content $path


2.ログイン情報を元にWMI接続を行う。

$root = Split-Path $MyInvocation.MyCommand.Path
$file = "○○ネットワークサーバ.pass"
$logfile = "○○ネットワークサーバ_hdd_size.txt"
$logpath = (Join-Path $root $logfile)

$password = Get-Content (Join-Path $root $file) | ConvertTo-SecureString
$credential = New-Object System.Management.Automation.PSCredential "userid@domain",$password

$targets = @()
$servers += "192.168.0.1"
$servers += "192.168.0.2"
$servers += "192.168.0.3"

filter GetDiskSize {
    $server_name = $_
    echo "■サーバ ${server_name}に接続します。" | Add-Content $logpath
    
    try
    {
        Get-WmiObject -Class win32_logicaldisk -ComputerName $_ -Credential $credential |
            select -Property DeviceID, Size, FreeSpace, `
                @{Name = "ServerName"; Expression = { $server_name }}
    }
    catch [UnauthorizedAccessException]
    {
        echo "`t>> アクセス権限エラー" | Add-Content $logpath
    }
}
filter OutLogFile {
    [string]$olf_servename = $_.ServerName
    [string]$olf_drivename = $_.DeviceID
    [string]$olf_size = ("{0:0.00}GB" -F ($_.Size / 1GB))
    [string]$olf_usage = ("{0:0.00}GB" -F (($_.Size - $_.FreeSpace) / 1GB))
    [string]$olf_filespace = ("{0:0.00}GB" -F ($_.FreeSpace / 1GB))
    [string]$olf_rate = "-"
    try {
        $olf_rate = ("{0:0.00}%" -F ($_.FreeSpace / $_.Size * 100))
    }
    catch [Exception] {}
    

    "{0}`t{1}`t{2}`t{3}`t{4}" -f $olf_drivename,$olf_size,$olf_usage,$olf_filespace,$olf_rate | Add-Content $logpath
}

#文字列配列でサーバ名を列挙し、列挙したサーバ名全部の容量を出力する
echo "【HDD容量】" | Set-Content $logpath
echo ("{0}`t{1}`t{2}`t{3}`t{4}" -f "レター","容量","使用量","空き容量(GB)","空き容量(%)") | Add-Content $logpath
$targets |
    GetDiskSize |
    OutLogFile

$logpath