Powershell 在计划任务中访问映射的网络驱动器失败

Powershell 在计划任务中访问映射的网络驱动器失败,powershell,wmi,Powershell,Wmi,我有以下powershell脚本,用于检查驱动器是否空间不足,如果空间不足,则停止sabnzbd下载并向我发送电子邮件: $disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='B:'" | Select-Object FreeSpace $gb =$disk.FreeSpace /1073741824 if($gb -lt 3) { $wc = New-Object system.Net.WebClient;

我有以下powershell脚本,用于检查驱动器是否空间不足,如果空间不足,则停止sabnzbd下载并向我发送电子邮件:

$disk = Get-WmiObject Win32_LogicalDisk  -Filter "DeviceID='B:'" | Select-Object FreeSpace 
$gb =$disk.FreeSpace /1073741824
if($gb -lt 3)
{

    $wc = New-Object system.Net.WebClient;
    $smsResult = $wc.downloadString("http://localhost:8080/sabnzbd/api?mode=pause&apikey=XXXXXXX")
    $EmailFrom = "XXXXXXX"
    $EmailTo = "XXXXXXX" 
    $Subject = "NAS out of space <eom>" 
    $Body = "" 
    $SMTPServer = "smtp.gmail.com" 
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential("XXXXXXX", "XXXXXXX"); 
    $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
}
$disk=Get WmiObject Win32_LogicalDisk-Filter“DeviceID='B:'”|选择对象自由空间
$gb=$disk.FreeSpace/1073741824
如果($gb-lt 3)
{
$wc=新对象system.Net.WebClient;
$smsResult=$wc.downloadString(“http://localhost:8080/sabnzbd/api?mode=pause&apikey=XXXXXXX")
$EmailFrom=“XXXXXXX”
$EmailTo=“XXXXXXX”
$Subject=“NAS空间不足”
$Body=“”
$SMTPServer=“smtp.gmail.com”
$SMTPClient=新对象Net.Mail.SMTPClient($SmtpServer,587)
$SMTPClient.EnableSsl=$true
$SMTPClient.Credentials=新对象系统.Net.NetworkCredential(“XXXXXXX”、“XXXXXXX”);
$SMTPClient.Send($EmailFrom、$EmailTo、$Subject、$Body)
}

当通过控制台或ISE在powershell中运行时,这非常有效,但当我设置计划任务时,WMI查询将驱动器大小返回为0。我没有收到任何错误,任务调度器说任务已成功完成。我以提升的权限作为管理员帐户运行任务。也曾试图在没有任何运气的情况下作为系统运行。很久以前,我曾看到其他人问过类似的问题,但他们似乎没有得到任何答案。

根据andyb的评论,我能够通过明确映射和取消映射驱动器来修复此问题,以便Powershell可以使用它

$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("K:", "\\192.0.0.0\NAS", $false, "192.0.0.0\NASAdmin", "xxxxxx")

$disk = Get-WmiObject Win32_LogicalDisk  -Filter "DeviceID='K:'" | Select-Object FreeSpace 
$gb =$disk.FreeSpace /1073741824
$gb>E:\test.txt


if($gb -lt 3)
{

    $wc = New-Object system.Net.WebClient;
    $smsResult = $wc.downloadString("http://localhost:8080/sabnzbd/api?mode=pause&apikey=xxxxxx")
    $EmailFrom = "xxxxxx"
    $EmailTo = "xxxxxx" 
    $Subject = "NAS out of space <eom>" 
    $Body = "" 
    $SMTPServer = "smtp.gmail.com" 
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
    $SMTPClient.EnableSsl = $true 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential("xxxxxx", "xxxxxx"); 
    $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
}
Start-Sleep 5
$net.RemoveNetworkDrive("K:");
$net=新对象-ComObject WScript.Network
$net.MapNetworkDrive(“K:”、“\\192.0.0\NAS”、$false、“192.0.0.0\NASAdmin”、“xxxxxx”)
$disk=Get WmiObject Win32_LogicalDisk-Filter“DeviceID='K:'”|选择对象自由空间
$gb=$disk.FreeSpace/1073741824
$gb>E:\test.txt
如果($gb-lt 3)
{
$wc=新对象system.Net.WebClient;
$smsResult=$wc.downloadString(“http://localhost:8080/sabnzbd/api?mode=pause&apikey=xxxxxx")
$EmailFrom=“xxxxxx”
$EmailTo=“xxxxxx”
$Subject=“NAS空间不足”
$Body=“”
$SMTPServer=“smtp.gmail.com”
$SMTPClient=新对象Net.Mail.SMTPClient($SmtpServer,587)
$SMTPClient.EnableSsl=$true
$SMTPClient.Credentials=新对象系统.Net.NetworkCredential(“xxxxxx”、“xxxxxx”);
$SMTPClient.Send($EmailFrom、$EmailTo、$Subject、$Body)
}
开始睡眠5
$net.RemoveNetworkDrive(“K:”);

B:'是本地驱动器吗?如果没有,并且映射到网络共享,则这可能是问题所在-当作为sched任务运行时,映射可能不可见。也许可以尝试运行简单的脚本
get wmiobject-class win32_logicaldisk | out文件c:\drives.txt
作为计划任务,并查看文本文件中显示的内容。如果B:是本地驱动器,那么也许可以尝试对其他本地驱动器运行相同的脚本-例如C:哇,你完全正确。脚本在本地驱动器上运行正常,但B:\是映射的网络驱动器,因此无法工作。你知道解决这个问题的办法吗?