如何将参数从文本文件传递到PowerShell脚本

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

我有一个脚本 - Master.ps1:

Get-ClusterResource "Cluster IP Address" | Set-ClusterParameter -Multiple  @{"Address"="xx.xx.x.xxx";"Network"="Cluster Network 1";"SubnetMask"="zzz.zzz.zzz.zzz"};
Get-ClusterResource "SQL IP Address 1 (Host-Name-SQL)" | Set-ClusterParameter -Multiple @{"Address"="xx.xx.x.yyy";"Network"="Cluster Network 1";"SubnetMask"="zzz.zzz.zzz.zzz"};
Start-ClusterResource -Name "CLuster IP Address";
Start-ClusterResource -Name "CLuster Name";
Start-ClusterResource -Name "SQL Server" -Wait 0;
Start-ClusterResource -Name "SQL Server Agent"

我还有一个带有参数的文件 PS_Param.txt:

param(
$ClusterIP="CLuster IP Address",
$Address1="xx.xx.x.xxx",
$Network1="Cluster Network 1",
$SubnetMask1="zzz.zzz.zzz.zzz",
$SQLServer="SQL IP Address 1 (Host-Name-SQL)",
$Address2="xx.xx.x.yyy",
$Network2="Cluster Network 1",
$SubnetMask2="zzz.zzz.zzz.zzz"
)

我创建了一个新脚本 - Master-Param.ps1:

param(
[string]$ClusterIP,
[string]$Address1,
[string]$Network1,
[string]$SubnetMask1,
[string]$SQLServer,
[string]$Address2,
[string]$Network2,
[string]$SubnetMask2
)
Get-ClusterResource $ClusterIP | Set-ClusterParameter -Multiple @{"Address"=$Address1;"Network"=$Network1;"SubnetMask"=$SubnetMask1};
Get-ClusterResource $SQLServer | Set-ClusterParameter -Multiple @{"Address"=$Address2;"Network"=$Network2;"SubnetMask"=$SubnetMask2};
Start-ClusterResource -Name "CLuster IP Address";
Start-ClusterResource -Name "CLuster Name";
Start-ClusterResource -Name "SQL Server" -Wait 0;
Start-ClusterResource -Name "SQL Server Agent"

所以,如果我像这样运行它就可以了:

Master-Param.ps1 "Cluster IP Address" "xx.xx.x.xxx" "Cluster Network 1" "zzz.zzz.zzz.zzz" "SQL IP Address 1 (Host-Name-SQL)" "xx.xx.x.yyy" "Cluster Network 1" "zzz.zzz.zzz.zzz" -Verb RunAs -Force

我想将参数的实际值从 PS_Param.txt 直接传递到 Master-Param.ps1,因此我不必在命令行中列出所有值,并且如果有任何更改(例如 IP 或名称),我只有一个 txt 文件要编辑。

我真的很感激我能得到的任何帮助。

我真的找不到任何关于如何完成我想做的事情以及是否可能的信息。 我将不胜感激任何帮助或可能为我指明正确的方向。

powershell
1个回答
1
投票

PS_Param.txt
更改为
PS_Param.psd1
PS_Param.ps1
并将结构从
param
块更改为单个哈希表:

@{
    ClusterIP   = 'CLuster IP Address'
    Address1    = 'xx.xx.x.xxx'
    Network1    = 'Cluster Network 1'
    SubnetMask1 = 'zzz.zzz.zzz.zzz'
    SQLServer   = 'SQL IP Address 1 (Host-Name-SQL)'
    Address2    = 'xx.xx.x.yyy'
    Network2    = 'Cluster Network 1'
    SubnetMask2 = 'zzz.zzz.zzz.zzz'
}

然后您可以首先使用

Import-PowerShellDataFile
获取参数,然后通过 hashtable splatting

调用脚本绑定参数
$myParams = Import-PowerShellDataFile path\to\PS_Param.psd1
Master-Param.ps1 @myParams
© www.soinside.com 2019 - 2024. All rights reserved.