Switch参数和If语句

问题描述 投票:0回答:1

我正在尝试使用switch参数的值作为触发器来写入csv文件,如果该参数是通过命令行中的脚本调用的。但是,使用我当前的代码,无论是否包含参数,都会创建csv文件。这是怎么回事?

此外,还有更好的方法来处理我的else / if else / if else部分吗?

[CmdletBinding()]
param (
    [Parameter(Mandatory=$true)]
    [string]$dir,
    [Parameter(Mandatory=$true)]
    [int]$days,
    [switch]$csv=$false
)

Process {
    Clear-Host
    $totSize = 0
    $totFiles = 0
    $modDate = (Get-date).AddDays(-$days).Date
    $modfiles = Get-ChildItem -Path $dir -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -ge $modDate } 
    If ($csv = $true){
        $modfiles | Select-Object -Property FullName, Length,LastWriteTime | Export-Csv -Path .\modFiles.csv -NoTypeInformation
    }
    foreach ($file in $modfiles){
        $totFiles = $totFiles + 1
        $totSize = $totSize + $file.Length 
    }

    If ($totSize -lt 1MB){
        $outSize = $totSize/1KB
        $unit = "KB"
    }
    elseif (($totSize -ge 1MB) -and ($totSize -lt 1GB)){
        $outSize = $totSize/1MB
        $unit = "MB"   
    }
    elseif ($totSize -ge 1GB){
        $outSize = $totSize/1GB
        $unit = "GB" 
    } 

    $outRound = [math]::Round($outSize,2)
    Write-Host $totFiles "Files"
    Write-Host $outRound $unit
}
powershell parameters switch-statement powershell-5.0
1个回答
0
投票

两个问题。

  1. 不为[switch]参数指定默认值。会把你弄乱的。保留它,如果指定则为$ true,如果为$ false没有。
  2. 在测试逻辑值(例如If语句)时,请勿使用赋值等于(=),而应使用比较等于(-eq)。所以

    如果(($ csv -eq $ true){$ modfiles |选择对象属性全名,长度,最后写入时间| Export-Csv -Path。\ modFiles.csv -NoTypeInformation}

我希望这会有所帮助。如果您喜欢此答案,请不要忘记接受它。

© www.soinside.com 2019 - 2024. All rights reserved.