Лучший отвечающий
В каком месте нужно указывать переменную

Вопрос
-
Добрый день, есть вот такой скрипт:
#robot chappy ver. 1.0 Add-Type -AssemblyName System.Windows.Forms $MainForm = New-Object System.Windows.Forms.Form $MainForm.Width = 250 $MainForm.Height = 380 $MainForm.FormBorderStyle = "Fixed3D" $MainForm.MinimizeBox = $false $MainForm.MaximizeBox = $false $MainForm.Text = "AM Chappy" $MainForm.StartPosition = "CenterScreen" $FormLabel = New-Object System.Windows.Forms.Label $FormLabel.Location = New-Object System.Drawing.Point (90,10) $FormLabel.Width = 70 $FormLabel.Text = "AM-Chappy" $MainForm.Controls.Add($FormLabel) <# FORM ELEMENTS #> #lang template $LangLabel = New-Object System.Windows.Forms.Label $LangLabel.Location = New-Object System.Drawing.Point (5,40) $LangLabel.Width = 60 $LangLabel.Text = "Language:" $LangLabelBox = New-Object System.Windows.Forms.ComboBox $LangLabelBox.Location = New-Object System.Drawing.Point(90,40) $LangLabelBox.Width = 100 $LangLabelBox.DataSource = @('EN','DE','FR','NL') $LangLabelBox.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList $MainForm.Controls.Add($LangLabel) $MainForm.Controls.Add($LangLabelBox) #count $CountLabel = New-Object System.Windows.Forms.Label $CountLabel.Location = New-Object System.Drawing.Point (5,70) $CountLabel.Width = 60 $CountLabel.Text = "Count:" $MainForm.Controls.Add($CountLabel) $CountBox = New-Object System.Windows.Forms.ComboBox $CountBox.Location = New-Object System.Drawing.Point(90,70) $CountBox.Width = 100 $CountBox.DataSource = @('1','2','3','4','5','6','7','8','9','10') $CountBox.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList #pool resource $PoolLabel = New-Object System.Windows.Forms.Label $PoolLabel.Location = New-Object System.Drawing.Point (5,100) $PoolLabel.Width = 82 $PoolLabel.Text = "Resource Pool:" $MainForm.Controls.Add($PoolLabel) $PoolBox = New-Object System.Windows.Forms.ComboBox $PoolBox.Location = New-Object System.Drawing.Point(90,100) $PoolBox.Width = 100 $PoolBox.DataSource = @('WORKS','WIN_WORKS','TECH') $PoolBox.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList #ip address proxy textbox and label $ProxyAddressLabel = New-Object System.Windows.Forms.Label $ProxyAddressLabel.Location = New-Object System.Drawing.Point (5,150) $ProxyAddressLabel.Width = 65 $ProxyAddressLabel.Text = "Proxy List:" $MainForm.Controls.Add($ProxyAddressLabel) $ProxyAddressTextbox = New-Object System.Windows.Forms.TextBox $ProxyAddressTextbox.Location = New-Object System.Drawing.Point(80,150) $ProxyAddressTextbox.Width = 120 #ip address proxy textbox and label $HostnameLabex = New-Object System.Windows.Forms.Label $HostnameLabex.Location = New-Object System.Drawing.Point (5,270) $HostnameLabex.Width = 65 $HostnameLabex.Text = "Hostname:" $MainForm.Controls.Add($HostnameLabex) $HostNameTextbox = New-Object System.Windows.Forms.TextBox $HostNameTextbox.Location = New-Object System.Drawing.Point(80,270) $HostNameTextbox.Width = 120 #button create $ButtonCreate = New-Object System.Windows.Forms.Button $ButtonCreate.Location = New-Object System.Drawing.Size(100,300) $ButtonCreate.Text = "Create VM" $ButtonCreate.Size = New-Object System.Drawing.Size(70,20) $ButtonCreate.Add_Click({ if ($LangLabelBox.SelectedItem = "EN") { #Generate random string for password $Country = 010 & 'C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1' Connect-VIServer -Server 192.168.250.123 -User root -Password $Spec=Get-OSCustomizationSpec -Name $LangLabelBox.SelectedItem if ($Spec -ne $null) { Set-OSCustomizationSpec -Spec $LangLabelBox.SelectedItem -Server 192.168.250.123 ` -GuiRunOnce "cmd /c powershell.exe -command `"$($OVPNvfg -join ',') | Out-File C:\text.txt", "wmic computersystem where name=""%COMPUTERNAME%"" call rename name=""$($HostNameTextBox.Text)""", "netsh advfirewall set allprofiles state off", "net user User $UserPassword /ADD", "net localgroup ""Remote Desktop Users"" User /add" -LicenseMode NotSpecified -AdminPassword $AdministratorPassword ` -TimeZone $Country -AutoLogonCount 1 -Workgroup WORKGROUP } New-VM -VMHost 192.168.200.13 -ResourcePool $PoolBox.SelectedItem -Datastore "iSCSIDataStore" -Name $HostNameTextbox.Text -Template "ENWin7ProN" -OSCustomizationSpec $LangLabelBox.SelectedItem Start-VM -VM $HostNameTextbox.Text Start-Sleep -Seconds 30 $Time = 0 do { $UpTime = Get-Stat -Entity $HostNameTextbox.Text -Stat sys.uptime.latest -Realtime -MaxSamples 1 $Time = $UpTime.Value $Time } until ($Time -gt 300) Get-VM -Name $HostNameTextbox.Text | %{$IPAddress = $_.Guest.IPAddress[0]} [System.Windows.Forms.MessageBox]::Show("Create VM successfully", "Chappy INFO", 0) $MainForm.Close() } }) $MainForm.Controls.Add($CountBox) $MainForm.Controls.Add($PoolBox) $MainForm.Controls.Add($ProxyAddressTextbox) $MainForm.Controls.Add($ButtonCreate) $MainForm.Controls.Add($HostNameTextbox) $MainForm.ShowDialog()
И есть переменная:
$OVPNvfg = "'client'", "'dev tun'", "'proto udp'", "'remote $($ProxyAddressTextbox.Text) 1144'", "'resolv-retry infinite'", "'nobind'", "'persist-key'", "'persist-tun'", "'ca ca.crt'", "'cert cli1.crt'", "'key cli1.key'", "'tls-client'", "'tls-auth ta.key 1'", "'comp-lzo'", "'verb 3'"
Не могу разобраться где ее вставить, чтобы строка
-GuiRunOnce "cmd /c powershell.exe -command `"$($OVPNvfg -join ',') | Out-File C:\text.txt"
корректно работала. Если я вставляю в место где я создаю переменные, то в нее есстественное не попадает введенное значение в поле $ProxyAddressTextbox.Text, а если указываю в действии кнопки, то файл вообще не создается
С уважением, Спицкий Никита
- Изменено Никита Спицкий 23 мая 2016 г. 15:49
23 мая 2016 г. 15:44
Ответы
-
В блоке $ButtonCreate.Add_Click({:
$ButtonCreate.Add_Click({ if ($LangLabelBox.SelectedItem = "EN") { $OVPNvfg = @" client`r`n dev tun`r`n proto udp`r`n remote $($ProxyAddressTextbox.Text) 1144`r`n resolv-retry infinite`r`n nobind`r`n persist-key`r`n persist-tun`r`n ca ca.crt`r`n cert cli1.crt`r`n key cli1.key`r`n tls-client`r`n tls-auth ta.key 1`r`n comp-lzo`r`n verb 3`r`n "@
Команда для выполнения:
powershell -Command "&{'$OVPNvfg'| Out-File C:\text.txt}"
- Помечено в качестве ответа Никита Спицкий 25 мая 2016 г. 16:19
23 мая 2016 г. 16:03Отвечающий -
Что такое "CSM такая строчка появилась" ?
Т.к. команда для запуска правильная, скрипт преобразуется в формат Base64,чтоб исключить экранирования и прочее и должен выполниться на удаленной машине. Для теста в GuiOnce файл создается если использовать:
cmd /c 1 > C:\test.txt или powershell -command "1 > C:\test.txt"
- Помечено в качестве ответа Никита Спицкий 25 мая 2016 г. 16:19
25 мая 2016 г. 14:43Отвечающий
Все ответы
-
В блоке $ButtonCreate.Add_Click({:
$ButtonCreate.Add_Click({ if ($LangLabelBox.SelectedItem = "EN") { $OVPNvfg = @" client`r`n dev tun`r`n proto udp`r`n remote $($ProxyAddressTextbox.Text) 1144`r`n resolv-retry infinite`r`n nobind`r`n persist-key`r`n persist-tun`r`n ca ca.crt`r`n cert cli1.crt`r`n key cli1.key`r`n tls-client`r`n tls-auth ta.key 1`r`n comp-lzo`r`n verb 3`r`n "@
Команда для выполнения:
powershell -Command "&{'$OVPNvfg'| Out-File C:\text.txt}"
- Помечено в качестве ответа Никита Спицкий 25 мая 2016 г. 16:19
23 мая 2016 г. 16:03Отвечающий -
К сожалению файл не создался
С уважением, Спицкий Никита
23 мая 2016 г. 17:40 -
Может кто подаст еще какие-нибудь идеи?
С уважением, Спицкий Никита
24 мая 2016 г. 5:43 -
Лучше вместо пустых слов, которые только засоряют, приводите логи выполнения и ошибок. Можно попробовать использовать base64:
$command = " '$OVPNvfg'| Out-File C:\test.txt " $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) -GuiRunOnce "powershell.exe -encodedCommand $encodedCommand"
24 мая 2016 г. 5:55Отвечающий -
вы из под админа запускаете? уак включен? есть право создания файлов в корне диска?
а чем вам идея посмотреть и показать таки логи ошибок вам не нравится?
тот же самый случай когда при включенном уаке пропадает право писать в корень - явно пишет красным по синему:
PS C:\> 'hello'|Out-File C:\test.txt Out-File : Access to the path 'C:\test.txt' is denied. At line:1 char:17 + 'hello'|Out-File <<<< C:\test.txt + CategoryInfo : OpenError: (:) [Out-File], UnauthorizedAccessException + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand
24 мая 2016 г. 9:51 -
Файл создается, если я не работаю с переменой в блоке add.click{()}. Т.е. если я указываю эту переменную выше этого блока, то все работает отлично. Ошибок никаких нет. У меня есть подозрение, что какая-то проблема с типом данных.
С уважением, Спицкий Никита
24 мая 2016 г. 11:42 -
Извините, не увидел сообщение, сейчас попробую
С уважением, Спицкий Никита
24 мая 2016 г. 11:43 -
В CSM такая строчка появилась
powershell.exe -EncodedCommand IAAnAGMAbABpAGUAbgB0AA0ACgANAAoAZABlAHYAIAB0AHUAbgANAAoADQAKAHAAcgBvAHQAbwAgAHUAZABwAA0ACgANAAoAcgBlAG0AbwB0AGUAIAAxADkAMgAuADEANgA4AC4AMgAyADIALgAyADIAMgAyACAAMQAxADQANAANAAoADQAKAHIAZQBzAG8AbAB2AC0AcgBlAHQAcgB5ACAAaQBuAGYAaQBuAGkAdABlAA0ACgANAAoAbgBvAGIAaQBuAGQADQAKAA0ACgBwAGUAcgBzAGkAcwB0AC0AawBlAHkADQAKAA0ACgBwAGUAcgBzAGkAcwB0AC0AdAB1AG4ADQAKAA0ACgBjAGEAIABjAGEALgBjAHIAdAANAAoADQAKAGMAZQByAHQAIABjAGwAaQAxAC4AYwByAHQADQAKAA0ACgBrAGUAeQAgAGMAbABpADEALgBrAGUAeQANAAoADQAKAHQAbABzAC0AYwBsAGkAZQBuAHQADQAKAA0ACgB0AGwAcwAtAGEAdQB0AGgAIAB0AGEALgBrAGUAeQAgADEADQAKAA0ACgBjAG8AbQBwAC0AbAB6AG8ADQAKAA0ACgB2AGUAcgBiACAAMwANAAoAJwB8ACAATwB1AHQALQBGAGkAbABlACAAQwA6AFwAdABlAHMAdAAuAHQAeABa0ACAA
С уважением, Спицкий Никита
24 мая 2016 г. 12:16 -
Base64 → UTF-824 мая 2016 г. 15:04
-
Извините, я не совсем понял, что вы имеете ввиду
С уважением, Спицкий Никита
25 мая 2016 г. 5:26 -
с кодировкой проблема... вчера начал читать, но щас времени нет доразобраться..
вроде вот на чтото из этого похоже -
25 мая 2016 г. 8:40 -
Что такое "CSM такая строчка появилась" ?
Т.к. команда для запуска правильная, скрипт преобразуется в формат Base64,чтоб исключить экранирования и прочее и должен выполниться на удаленной машине. Для теста в GuiOnce файл создается если использовать:
cmd /c 1 > C:\test.txt или powershell -command "1 > C:\test.txt"
- Помечено в качестве ответа Никита Спицкий 25 мая 2016 г. 16:19
25 мая 2016 г. 14:43Отвечающий