powershell - 在Powershell中使用不同的输入多次调用同一函数的最佳方法是什么

标签 powershell

我希望使用不同的输入多次调用此Set-FixedVariable,但是当我调用DeclareFixedVariables时,我只能设法执行一次,为什么呢?

Function DeclareFixedVariables
{
    try
    {
        Set-FixedVariable -name 'fixModelName'-value $ModelName -size 30
        Set-FixedVariable -name 'fixMasterSetId' -value $ReturnMessage.MasterSetID -size 36
        Set-FixedVariable -name 'fixModelversionId'-value $ModelversionID -size 36
        Set-FixedVariable -name 'fixStartDateStr' -value $StartDateStr -size 23
        Set-FixedVariable -name 'fixCreateDate' -value $CreateDateStr -size 23
        Set-FixedVariable -name 'fixModelChangeDate' -value $ModelChangeDate -size 23
        Set-FixedVariable -name 'fixModelOwner' -value $ModelProperties.UserId -size 6
        Set-FixedVariable -name 'fixChangeId' -value $ModelProperties.ChangeId -size 10
        Set-FixedVariable -name 'fixChangeUser' -value $ModelProperties.UserId -size 10
        Set-FixedVariable -name 'fixAfBolag' -value $afBolag -size 2
        Set-FixedVariable -name 'fixThBolag' -value $thBolag -size 2
    }catch
    {
        Write-Log -Message "***Invoking Set-FixedVariable failed***" -Path $LogFile -Level Info
    }
}

function Set-FixedVariable 
{

    param( [parameter(mandatory)][string]$name,
           [parameter(mandatory)][string]$value,
           [parameter(mandatory)][int]$size
    )

    $sb = [System.Text.Stringbuilder]::new( ' ' * $size )
    [void]$sb.Insert(0, $value)

    Set-Variable -Name $name -Value $sb.ToString().Substring(0, $size) -Scope Script -Force

    return $value

}

最佳答案

现在,我看到的唯一真正的问题是,所有变量都仅使用Set-FixedVariable设置,只有一个try/catch块,这意味着PowerShell将逐行处理每个变量,然后在第一个失败时停止。

最好像这样用forEach循环来处理。

Function DeclareFixedVariables
{

    $VariableSettings = @(
        @{Name='fixModelName';Value=$ModelName;Size=30},
        @{Name='fixMasterSetId';Value=$ReturnMessage.MasterSetID;Size=36},
        @{Name='fixModelversionId';Value=$ModelversionID;Size=23}
    )

    forEach($variableSetting in $VariableSettings){
        try{
            Set-FixedVariable @variableSetting
        }
        catch{
            Write-Log -Message "***Invoking Set-FixedVariable failed for $($VariableSetting.Name) with value $($VariableSetting.Value)***" -Path $LogFile -Level Info
        }
    }

}

从代码审查标准来看,这可能更容易阅读(特别是如果稍微调整布局),并且即使其中一项失败,代码也会在每一项上执行。

下一步:您可能需要仔细检查Set-FixedVariable打算做什么的假设。令人困惑的是,为什么在值之前有一个包含多个空格的数组会有所帮助?

关于powershell - 在Powershell中使用不同的输入多次调用同一函数的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62024586/

相关文章:

powershell - 如何从WMI界面检索Xenstore参数

azure - 在 Powershell 中使用 AzureAD 使用此脚本批量更改 Office 位置,但未进行任何更改

powershell - 从 PowerShell 对象中删除成员?

azure - 对于 Microsoft Graph 中缺少 UsersPermissionToUserConsentToAppEnabled 是否有任何解决方法?

Powershell:在计划任务文件夹中创建计划任务;找不到路径

powershell - 如何在 PowerShell 中按列排序?

azure - 使用 Powershell 使用 AZMetrics 获取存储帐户大小通常返回 0

windows - 在 Windows 批处理中使用 PowerShell 命令和反引号换行符

azure - 使用 PowerShell 添加 Azure AD 帐户作为 SQL 登录失败

powershell - 如何在 Powershell 中等待线程?