#powershell
Вопрос:
Я хочу использовать строку внутри сценария PowerShell. Он должен передаваться как переменная при выполнении такого сценария:
C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -c C:tempmyscript.ps1 "string"
Это хорошо работает всего с одним словом. Но моя строка выглядит так, и ее следует передать:
**<UserInputs><UserInput Question="Gruppenname" Answer="amp;<Values Count=amp;quot;1amp;quot;amp;>amp;<Value DisplayName=amp;quot;Humanresourcesamp;quot; Id=amp;quot;af05c5d3-2312-c897-8439-08979d4d0a49amp;quot; /amp;>amp;</Valuesamp;>" Type="System.SupportingItem.PortalControl.InstancePicker" /><UserInput Question="Ausgabe" Answer="Namen" Type="richtext" /></UserInputs>**
Эта строка содержит несколько кавычек, и у меня возникли проблемы с введением ее в мой скрипт.
внутри сценария у меня есть это:
$mystring = $Null if($args[0] -ne $Null) { $mystring = $args[0] } $result = $mystring | Select-String -Pattern "DisplayName=amp;quot;(.*?)amp;quot;" $result= $result.Matches.Groups[1] $group = $result.value Write-Output "$group" | Out-file C:tempgroup.txt
Ответ №1:
Сценарии PowerShell могут принимать параметры, которые становятся переменными, доступными только для остальной части сценария. Используйте это в верхней части вашего скрипта для настройки трех переменных, одного логического типа (true false), одного строкового типа и одного целочисленного типа.
#stack.ps1
param(
# Param1 help description
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
[string]$MyString="MyDefaultValue",
[int]$MyIntInput,
[bool]$MyTrueFalseInput
)
"Script running!"
"Values recieved!"
"MyString = $MyString"
"MyIntInput = $MyIntInput"
"MyTrueFalse = $MyTrueFalseInput"
Затем передать значения
C:temp> .stack.ps1 -MyString Ham -MyIntInput 75 -MyTrueFalseInput $true
Script running!
Values recieved!
MyString = Ham
MyIntInput = 75
MyTrueFalse = True
Как работать с нечетными или сложными строками
Теперь, чтобы передать сложную строку, содержащую кавычки, используйте этот синтаксис:
#using single quotes as a delimiter, ignoring the doubles inside.
$myWeirdString = 'ThisIs"SomeString"WhichHasQuotes"WhichIsWeird'
## extra case, if it's really odd and has both quote types
$myWeirdString = @"
'ThisIs"SomeString"WhichHasQuotes"WhichIsWeird'
"@
Комментарии:
1.
'
это АПОСТРОФ."
это КАВЫЧКА. Нам будет лучше, когда мы перестанем использоватьsingle
иdouble
называть их. unicode.org/charts/PDF/U0000.pdf