Во-первых, я бы, наверное, попробовал прочитать файл только один раз. Затем, поскольку вы выполняете много подобных операций, я бы поместил все данные об операциях в массив, а затем перебрал бы эти данные.
В этом коде я сначала прочитал файл. Затем я определяю все строки, которые должны быть заменены, вместе со строками, которые должны их заменить. Затем я использую al oop для перебора данных, чтобы мы не повторяли один и тот же код все время.
$data = Get-Content -Path $copyFileLocation -Raw
$replacements = @(
@('"INSTANCENAME="TEST""', $NUEVAINESTANCIA),
@('"INSTANCEID="TEST""', $NUEVAINESTANCIAID),
@("NT Service\SQLAgent#TEST", $CUENTAAGTN),
@("NT Service\MSSQL#TEST", $CUENTASQLSER),
@("##MyUser##", "$env:UserDomain\$env:USERNAME")
)
$replacements | ForEach-Object {
$data = $data.Replace($_[0], $_[1])
}
Set-Content -Path $copyFileLocation -Value $data
Также можно сделать это еще короче, если вы используете конвейер вместо присвоение данных переменной
$data = Get-Content -Path $copyFileLocation -Raw
@(
@('"INSTANCENAME="TEST""', $NUEVAINESTANCIA),
@('"INSTANCEID="TEST""', $NUEVAINESTANCIAID),
@("NT Service\SQLAgent#TEST", $CUENTAAGTN),
@("NT Service\MSSQL#TEST", $CUENTASQLSER),
@("##MyUser##", "$env:UserDomain\$env:USERNAME")
) | ForEach-Object {
$data = $data.Replace($_[0], $_[1])
}
Set-Content -Path $copyFileLocation -Value $data
Изменить: пропустил, что вы спрашивали, как превратить его в функцию.
Глядя на то, что вы делаете, я предполагаю, что вы изменяете SQL файл автоматической установки и присвоил ему соответствующее имя.
Хорошая идея - сделать большинство параметров обязательными, чтобы вы были уверены, что пользователь по крайней мере указывает все необходимые параметры. Возможно, вы захотите указать MyUser
позже, так что это хороший кандидат в качестве параметра со значением по умолчанию.
Function Set-SQLInstallFileVariables {
Param(
[Parameter(Mandatory)][string]$FilePath,
[Parameter(Mandatory)][string]$NUEVAINESTANCIA,
[Parameter(Mandatory)][string]$NUEVAINESTANCIAID,
[Parameter(Mandatory)][string]$CUENTAAGTN,
[Parameter(Mandatory)][string]$CUENTASQLSER,
[string]$MyUser = "$env:UserDomain\$env:USERNAME"
)
$data = Get-Content -Path $FilePath -Raw
@(
@('"INSTANCENAME="TEST""', $NUEVAINESTANCIA),
@('"INSTANCEID="TEST""', $NUEVAINESTANCIAID),
@("NT Service\SQLAgent#TEST", $CUENTAAGTN),
@("NT Service\MSSQL#TEST", $CUENTASQLSER),
@("##MyUser##", $MyUser)
) | ForEach-Object {
$data = $data.Replace($_[0], $_[1])
}
Set-Content -Path $copyFileLocation -Value $data
}