繁体   English   中英

在 Powershell 中为远程计算机执行 CHKDSK

[英]Executing CHKDSK for remote computer in Powershell

这是我想出的,但它说“驱动器号不存在”

clear
$server = Read-Host "Enter server name"
$driveletter = Read-Host "Enter Drive Letter"
$disks = Get-WmiObject -ComputerName $server -Class Win32_LogicalDisk -Filter  ("DeviceID='" + $driveletter+":'")

$FixErrors          = $false    # does not fix errors 
$VigorousIndexCheck = $true     # performs a vigorous check of the indexes
$SkipFolderCycle    = $false    # does not skip folder cycle checking.
$ForceDismount      = $false    # will not force a dismount (to enable errors to be   fixed)
$RecoverBadSecors   = $false    # does not recover bad sectors
$OKToRunAtBootup    = $false    # runs now, vs at next bootup

foreach($disk in $disks) 
{
    $deviceID = $disk.DeviceID
    Write-Host $deviceID

    If ($deviceID -eq $driveletter)
    {
         $res = $c.chkdsk($FixErrors, 
                    $VigorousIndexCheck, 
                    $SkipFolderCycle, 
                    $ForceDismount,
                     $RecoverBadSecors, 
                   $OKToRunAtBootup)

          $result = $res.ReturnValue
          Write-Host $result

}
Else
{
    "Drive letter does not exist"
}
}

我输入的服务器 ping 正常并返回驱动器号,但它没有返回 chkdsk 返回值。 如何获得 chkdsk 返回值?

正如错误所暗示的那样,您很接近$drive只是一个字符串。 为了执行它,您需要从您的行中捕获返回。 由于查询返回一组对象,我们只想确保仅返回一个对象(即使您将其编码为仅返回一个)。

$wmiDrive = Get-WmiObject -Class Win32_Volume -Filter ("DriveLetter='c:'") | Select-Object -First 1
$wmiDrive.chkdsk($false, $true, $false, $false, $false, $false)

使用$wmiDrive您可以执行chkdsk的方法。

单引号可防止变量扩展,因此您可以将"DriveLetter='c:'"替换为:

("DriveLetter='" + $drletter + ":'")

我认为你把它复杂化了。 尝试

$driveletter = Read-Host "Enter Drive Letter"
$disk = Get-WmiObject -Class Win32_LogicalDisk -Filter  ("DeviceID='" + $driveletter+":'")

if ($disk){
    $FixErrors          = $false    # does not fix errors 
    $VigorousIndexCheck = $true     # performs a vigorous check of the indexes
    $SkipFolderCycle    = $false    # does not skip folder cycle checking.
    $ForceDismount      = $false    # will not force a dismount (to enable errors to be   fixed)
    $RecoverBadSecors   = $false    # does not recover bad sectors
    $OKToRunAtBootup    = $false    # runs now, vs at next bootup
    $res = $disk.chkdsk($FixErrors, 
                    $VigorousIndexCheck, 
                    $SkipFolderCycle, 
                    $ForceDismount,
                     $RecoverBadSecors, 
                   $OKToRunAtBootup)
     #bonus from http://msdn.microsoft.com/en-us/library/aa384915(v=vs.85).aspx     
     $char=$res.returnvalue
     If ($char -ge 0 -and $char -le 5) {
        switch ($char) {
            0{"00-Success"}
            1{"01-sUCCESS (volume locked and chkdsk scheduled for reboot"}
            2{"02-unsupported file system"}
            3{"03-Unknown file system"}
            4{"04-No Media in drive"}
            5{"05-Unknown Error"}
        }
    }

    Else {
        "{0} - *Invalid Result Code*" -f $char
    }
}

Else
{
    "Drive letter does not exist"
}

参数 $VigorousIndexCheck 不正确。 正确的名称应该是 $LessVigorousIndexCheck 并设置为默认的 'false' 因为与 chkdsk 参数相关 /I>>>

/I NTFS only:对索引条目执行较不严格的检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM