#powershell #powershell-ise
#powershell #powershell-ise
Вопрос:
У меня есть приведенный ниже скрипт, который позволяет мне переключаться между различными элементами и запускать функции в них одну за другой.
Но что мне нужно сделать сейчас, так это сделать так, чтобы я мог выбрать несколько из них, запустить их и сделать паузу между ними, чтобы проверить, правильно ли все загружено. Таким образом, я не сталкиваюсь с проблемой повторного запуска полного сценария снова и повторения того же самого.
Кто-нибудь может показать мне, как это сделать? Я не понимаю, как завершить это и работать должным образом.
write-host "Sets up location you want to run staging"
$ElementDistro = Read-Host -Prompt "Which Element do you want to run? (TV30/TV30BP/TV30LM/TV30PV/LT101/XR2/MU11/SAP)"
while ($ElementDistro -notmatch "^(TV30|TV30BP|TV30LM|TV30PV|LT101|XR2|MU11|SAP)$")
{
write-host "you have enterd an error" -ForegroundColor Red
write-host "You must type TV30 or TV30BP or TV30LM or TV30PV or LT101 or XR2 or MU11 or SAP"
write-host "you typed $ElementDistro"
write-host "set location you want to run staging"
$ElementDistro = Read-Host -Prompt "Which Element do you want to run? (TV30/TV30BP/TV30LM/TV30PV/LT101/XR2/MU11/SAP)"
}
switch ($ElementDistro)
{
'TV30'
{
# Do TV30 Stuff
write-host "you have entered TC TV30"
$passwd = convertto-securestring -AsPlainText -Force -String ''
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
$session = enter-pssession -computername '' -credential $cred
$source = Select-TC
$destination = 'Desktop'
"Calling Copy-Item with parameters source: '$source', destination: '$destination'."
Copy-Item -Path $source -Destination $destination
exit-pssession
break
}
'TV30BP'
{
# Do TV30BP Stuff
$passwd = convertto-securestring -AsPlainText -Force -String ''
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
$session = enter-pssession -computername '' -credential $cred
$source = Select-TC
$destination = 'Desktop'
"Calling Copy-Item with parameters source: '$source', destination: '$destination'."
Copy-Item -Path $source -Destination $destination
# exit-pssession
break
}
'TV30LM'
{
# Do TV30LM stuff
$passwd = convertto-securestring -AsPlainText -Force -String ''
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
$session = enter-pssession -computername '' -credential $cred
$source = Select-TC
$destination = 'Desktop'
"Calling Copy-Item with parameters source: '$source', destination: '$destination'."
Copy-Item -Path $source -Destination $destination
exit-pssession
break
}
'TV30PV'
{
# Do TV30PV stuff
$passwd = convertto-securestring -AsPlainText -Force -String ''
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
$session = enter-pssession -computername '' -credential $cred
$source = Select-TC
$destination = 'Desktop'
"Calling Copy-Item with parameters source: '$source', destination: '$destination'."
Copy-Item -Path $source -Destination $destination
exit-pssession
break
}
'LT101'
{
# Do LT101 stuff
$passwd = convertto-securestring -AsPlainText -Force -String ''
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
$session = enter-pssession -computername '' -credential $cred
break
}
'XR2'
{
# Do XR2 stuff
$passwd = convertto-securestring -AsPlainText -Force -String ''
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
$session = enter-pssession -computername '' -credential $cred
break
}
'MU11'
{
# Do TF10 stuff
$passwd = convertto-securestring -AsPlainText -Force -String ''
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
$session = enter-pssession -computername '' -credential $cred
break
}
'SAP'
{
# Do SAP stuff
$passwd = convertto-securestring -AsPlainText -Force -String ''
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
$session = enter-pssession -computername '' -credential $cred
break
}
}
break
}
Комментарии:
1. Вы могли бы обернуть весь этот бит внутри
Do{<your script>}While(!($ElementDistro -ieq "q"))
, и он просто вернется к меню, пока вы не введете Q. Затем добавьте Q к вашим текущим параметрам в качестве опции выхода.2. Это может сработать для того, чего я пытаюсь достичь. Я все еще ищу, как сделать так, чтобы я мог выбрать несколько одновременно и запустить его.
3. К вашему сведению, ваша последняя закрывающая фигурная скобка ничему не соответствует. Кроме того, ранее у вас отсутствовали открывающие кавычки
Desktop
в разделах TV30BP и TV30PV.4. Спасибо за информацию. Я даже не заметил, что пропустил этот материал.
5. Используйте хороший редактор кода с подсветкой синтаксиса. Недостающие кавычки выскочили у меня в тот момент, когда я добавил подсветку синтаксиса. Или, если у вас нет хорошего редактора кода, вы можете использовать ISE PowerShell.
![]()
Ответ №1:
Если у вас есть хотя бы версия V3, вы можете использовать Out-GridView с -OutPutMode Multiple в качестве меню для выбора нескольких элементов из:
$Menu = 'TV30','TV30BP','TV30LM','TV30PV','LT101','XR2','MU11','SAP','ALL'
$Choices = $Menu | Out-GridView -OutputMode Multiple -Title 'Select Locations you want to run staging, and click OK.'
Switch ($Choices)
{
.....
Комментарии:
1. Это то, что мне нужно для этого сценария. Спасибо.
Ответ №2:
Быстрый ответ заключается в том, что оператор switch Powershell принимает массив для ввода. Если вы не используете оператор break в конце каждого варианта переключения, он будет выполнять каждый случай, который соответствует. Введите свои варианты в виде списка, разделенного запятыми, и поместите их в массив с помощью инструкции split.
Каждый выбор в вашем массиве $ Choices будет выполнен. Если вы разместите оператор Pause там, где находятся ваши операторы break, вы можете сделать паузу при завершении каждого шага.
$Choices = @('TV30','MU11')
switch ($Choices)
{
'TV30' {some code}
'TV30BP' {some code}
'MU11' {some code}
}
Комментарии:
1. Это отлично работает. Но я все еще использую оператор while над ним, чтобы открыть окно и ввести нужный мне выбор. Так что мне нужно было бы изменить эту часть для чтения вариантов, чтобы она заполнила состояние переключателя.
2. Спасибо за помощь. Вы действительно помогли мне с другим сценарием, над которым я работаю.