繁体   English   中英

Powershell 带两个变量的循环

[英]Powershell Loop with two variables

我正在寻找一种将 pipe 许多(100 个配对变量)项目放入此 powershell 脚本的方法。 每个命令都有两个变量 ResourceGroup 和 AccountName。 我可以构建一个数组,但不确定如何让脚本执行配对变量。

编辑:有没有办法从 CSV 导入这些变量,或者直接拉它们。

$rgName = "<resource-group>"
$accountName = "<storage-account>"
$location = "<location>"

# Create a storage account with MinimumTlsVersion set to TLS 1.1.
New-AzStorageAccount -ResourceGroupName $rgName `
    -AccountName $accountName `
    -Location $location `
    -SkuName Standard_GRS `
    -MinimumTlsVersion TLS1_1

# Read the MinimumTlsVersion property.
(Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName).MinimumTlsVersion

# Update the MinimumTlsVersion version for the storage account to TLS 1.2.
Set-AzStorageAccount -ResourceGroupName $rgName `
    -AccountName $accountName `
    -MinimumTlsVersion TLS1_2

# Read the MinimumTlsVersion property.
(Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName).MinimumTlsVersion

如果要将变量组合在一起,可以使用System.Management.Automation.PSCustomObject数组,然后迭代此数组并运行代码:

param (
    [Parameter(Mandatory = $true)]
    [PSCustomObject[]]
    $StorageAccountData
)

foreach ($obj in $StorageAccountData) {
    $rgName = $obj.ResourceGroupName
    $accountName = $obj.AccountName
    $location = $obj.Location

    # Create a storage account with MinimumTlsVersion set to TLS 1.1.
    New-AzStorageAccount -ResourceGroupName $rgName `
        -AccountName $accountName `
        -Location $location `
        -SkuName Standard_GRS `
        -MinimumTlsVersion TLS1_1

    # Read the MinimumTlsVersion property.
    (Get-AzStorageAccount `
        -ResourceGroupName $rgName `
        -Name $accountName).MinimumTlsVersion

    # Update the MinimumTlsVersion version for the storage account to TLS 1.2.
    Set-AzStorageAccount `
        -ResourceGroupName $rgName `
        -AccountName $accountName `
        -MinimumTlsVersion TLS1_2

    # Read the MinimumTlsVersion property.
    (Get-AzStorageAccount `
        -ResourceGroupName $rgName `
        -Name $accountName).MinimumTlsVersion
}

然后你可以像这样运行这个脚本:

PS C:\Users\user> $storageAccountData = @(
>>     [PSCustomObject]@{
>>         ResourceGroupName = 'storageRG'
>>         AccountName = 'storage1'
>>         Location = 'australiaeast'
>>     }
>>     [PSCustomObject]@{
>>         ResourceGroupName = 'storageRG'
>>         AccountName = 'storage2'
>>         Location = 'australiaeast'
>>     }
>> )
PS C:\Users\user> script.ps1 -StorageAccountData $storageAccountData

如果你想将pipe这个放到脚本中,你可以创建一个 function 并使用ValueFromPipeline

function MyFunction {
    [CmdletBinding()]
    param (
        [Parameter(
            Mandatory = $true, 
            ValueFromPipeline = $true
        )]
        [PSCustomObject[]]
        $StorageAccountData
    )
    # rest of your code
}

然后将PSCustomObject的数组向下传递,然后通过管道传递到这个 function 和$storageAccountData | MyFunction 我的$storageAccountData | MyFunction 在调用 function 之前,请确保点源脚本以将 function 加载到您首选的 scope 中。

更新

如果您想读取 CSV 文件(例如 storage-accounts.csv):

AccountName,ResourceGroupName,Location
storage1,storageRG,australiaeast
storage2,storageRG,australiaeast

您只需要使用Import-Csv

$storageAccountData = Import-Csv -Path .\storage-accounts.csv

foreach ($obj in $storageAccountData) {
    # rest of your code
}

暂无
暂无

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

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