Powershell 调度磁盘空间导入

Powershell Scheduling Diskspaces import

OS windows 8,我正在安排一个脚本来导入空闲磁盘空间以导入 csv 文件,使用 windows 任务 schedular.The 脚本手动运行但没有它在计划时给出的输出是 task schedular 。使用的代码如下

            Set-ExecutionPolicy Unrestricted -Force

            $filepath = "C:\Users\asdf\Downloads\Powershell\CheckFreeSpaceV3"
            $servername = "abc"

            #delete reports older than 7 days
            $OldReports = (Get-Date).AddDays(-7)

            #Removing Report older than 7 Days
            Get-ChildItem $filepath\DiskReport*.* | `
            Where-Object { $_.LastWriteTime -le $OldReports} | `
            Remove-Item -Recurse -Force -ErrorAction SilentlyContinue  

            #Create variable for log date
            $LogDate = get-date -f yyyyMMddhhmm

            $DiskReport = Get-WmiObject win32_logicaldisk `
            -ComputerName $servername -Filter "Drivetype=3" `
            -ErrorAction SilentlyContinue | 
            #return only disks with free space less than or equal to 0.1 (40%)
            Where-Object {   ($_.freespace/$_.size) -le '0.4'}

            #Create Reports
            $DiskReport | 
            Select-Object @{Label = "Server Name";Expression = {$_.SystemName}},
            @{Label = "Drive";Expression = {$_.DeviceID}},
            @{Label = "Total Space(GB)";Expression = {"{0:N1}" -f( $_.Size / 1gb)}},
            @{Label = "Free Space (GB)";Expression = {"{0:N1}" -f( $_.Freespace / 1gb ) }},
            @{Label = 'Free Space (%)'; Expression = {"{0:P0}" -f ($_.freespace/$_.size)}} |


I put the following arguments in taskschdular arguments
-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File powershell_Script_path

您的脚本没有创建任何报告文件作为输出,而且额外的管道正在抛出异常。

我已经用您的脚本创建了一个 HTML 文件,现在可以正常工作了。

HTML 文件将生成在 D:\ 驱动器,名称为 HTML_Report.html。您可以使用 Google Chrome.

进行简单查看

因此,每次脚本都会创建新文件,如果该文件已经存在,那么它将覆盖现有文件。

现在,将脚本放在您想要的路径中,您可以使用上述脚本路径在任务计划程序中创建任务,这将触发并在上述位置创建输出文件。

注意:如果您没有驱动器,请指向其他位置。

        Set-ExecutionPolicy Unrestricted -Force

        $filepath = "C:\Users\farooq.GENIE\Downloads\Powershell\CheckFreeSpaceV3"
        $servername = "GT030"

        #delete reports older than 7 days
        $OldReports = (Get-Date).AddDays(-7)

        #Removing Report older than 7 Days
        Get-ChildItem $filepath\DiskReport*.* | `
        Where-Object { $_.LastWriteTime -le $OldReports} | `
        Remove-Item -Recurse -Force -ErrorAction SilentlyContinue  

        #Create variable for log date
        $LogDate = get-date -f yyyyMMddhhmm

        $DiskReport = Get-WmiObject win32_logicaldisk `
        -ComputerName $servername -Filter "Drivetype=3" `
        -ErrorAction SilentlyContinue | 
        #return only disks with free space less than or equal to 0.1 (40%)
        Where-Object {   ($_.freespace/$_.size) -le '0.4'}

        #Create Reports
        $DiskReport | 
        Select-Object @{Label = "Server Name";Expression = {$_.SystemName}},
        @{Label = "Drive";Expression = {$_.DeviceID}},
        @{Label = "Total Space(GB)";Expression = {"{0:N1}" -f( $_.Size / 1gb)}},
        @{Label = "Free Space (GB)";Expression = {"{0:N1}" -f( $_.Freespace / 1gb ) }},
        @{Label = 'Free Space (%)'; Expression = {"{0:P0}" -f ($_.freespace/$_.size)}} |ConvertTo-Html  | Out-File D:\HTML_Report.html -Force
#Task scheduler Script as discussed

$jobname = "Powershell_Task"
$script =  "D:\PsScript.ps1"
$repeat = New-TimeSpan -Hours 1
$Start_Time= Get-Date
$action = New-ScheduledTaskAction –Execute "$pshome\powershell.exe" -Argument  "$script; quit"
$duration = ([timeSpan]::maxvalue)
$trigger = New-ScheduledTaskTrigger -Once -At $Start_Time -RepetitionInterval $repeat -RepetitionDuration $duration
$settings = New-ScheduledTaskSettingsSet -WakeToRun -DontStopIfGoingOnBatteries -StartWhenAvailable -RunOnlyIfNetworkAvailable -DontStopOnIdleEnd

Register-ScheduledTask -TaskName $jobname -Action $action -Trigger $trigger -Settings $settings