Size: a a a

2021 July 24

VG

Vasily Gusev in Powershell Rus
ctrl+space на пустом месте нажать - будет список
источник

VG

Vasily Gusev in Powershell Rus
можно и свои добавлять
источник

RH

Roman Holubenko in Powershell Rus
источник

RH

Roman Holubenko in Powershell Rus
то что надо
СПС!
источник

RH

Roman Holubenko in Powershell Rus
Разрешите еще вопрос
есть функция
function Get-Dns-Records-Count
{
 $resultGetDnsRecordsCount = Invoke-RestMethod  -Uri "https://api.cloudflare.com/client/v4/zones/$ZoneId/dns_records?type=A&name=$DnsRecord " -Method Get  -Headers $RequestHeader -ContentType  "application/json"
 $DnsRecordsCount =  ($resultGetDnsRecordsCount.result.id).Count
}
понятно что в функцию могу подать параметры $ZoneId, $DnsRecord
но сейчас не это главное
так вот  если вручную запустить строки
$resultGetDnsRecordsCount = Invoke-RestMethod  -Uri "https://api.cloudflare.com/client/v4/zones/$ZoneId/dns_records?type=A&name=$DnsRecord " -Method Get  -Headers $RequestHeader -ContentType  "application/json"
 $DnsRecordsCount =  ($resultGetDnsRecordsCount.result.id).Count
то получаю правильный результат,
если объявляю функцию, позже вызываю функции, то данные в переменной  $DnsRecordsCount не обновляются
источник

RH

Roman Holubenko in Powershell Rus
не пойму почему...
источник

RH

Roman Holubenko in Powershell Rus
переменная из функции не действует за пределами функции?
источник

RH

Roman Holubenko in Powershell Rus
а можно ссылку на блог?
разберу примеры на заметки
источник

RH

Roman Holubenko in Powershell Rus
кажется понял...
источник

RH

Roman Holubenko in Powershell Rus
пробую через $glogal:переменная
источник

M

MRL in Powershell Rus
ребят, подскажите пож. Есть код на powershell:

$vms = Get-VM | foreach {$_.name}
$vm_name = $vms -join ","
$vm_name = """$vm_name"""

$backup_target="C:\"

$App = "C:\windows\System32\wbadmin.exe"
$Arg1 = "start"
$Arg2 = "backup"
$Arg3 = "-backuptarget:$backup_target"
$Arg4 = "-hyperv:$vm_name"
$Arg5 = "-vssFull"
$Arg8 = "-quiet"

$command = "$App $Arg1 $Arg2 $Arg3 $Arg4 $Arg5 $Arg8"

write-host $command
Invoke-Expression $command
Exit 0

Программа которая его вызывает может взаимодействовать только через CMD. Чтобы это было возможно, я пытаюсь сделать что-то подобное:

powershell -Command "$vms = Get-VM | foreach {$_.name};$vm_name = $vms -join ","$vm_name = """$vm_name""";$backup_target="D:\";$App = "C:\windows\System32\wbadmin.exe";$Arg1 = "start";$Arg2 = "backup";$Arg3 = "-backuptarget:$backup_target";$Arg4 = "-hyperv:$vm_name";$Arg5 = "-vssFull";$Arg8 = "-quiet";$command = "$App $Arg1 $Arg2 $Arg3 $Arg4 $Arg5 $Arg8";write-host $command;Invoke-Expression $command;Exit 0"

Но получаю ошибку:
В строке отсутствует завершающий символ: ".

Возможно из-за отсутсвия экранирования? Экранируем...

powershell -Command \"$vms = Get-VM | foreach {$_.name};$vm_name = $vms -join \",\"$vm_name = \"\"\"$vm_name\"\"\";$backup_target=\"D:\\\";$App = \"C:\\windows\\System32\\wbadmin.exe\";$Arg1 = \"start\";$Arg2 = \"backup\";$Arg3 = \"-backuptarget:$backup_target\";$Arg4 = \"-hyperv:$vm_name\";$Arg5 = \"-vssFull\";$Arg8 = \"-quiet\";$command = \"$App $Arg1 $Arg2 $Arg3 $Arg4 $Arg5 $Arg8\";write-host $command;Invoke-Expression $command;Exit 0\"

получаем:

строка:1 знак:75
+ "$vms = Get-VM | foreach {$_.name};$vm_name = $vms -join
...
источник

M

MRL in Powershell Rus
Принципиально, чтобы скрипт не запускался из файла. Только командами...
источник

AF

Alexey D. Filimonov ... in Powershell Rus
А платформа линух?
источник

AF

Alexey D. Filimonov ... in Powershell Rus
Откуда ты слеши эти понапридумывал то
источник

M

MRL in Powershell Rus
windows 2008
источник

AF

Alexey D. Filimonov ... in Powershell Rus
Powershell.exe /?
Encodedcommand
источник

M

MRL in Powershell Rus
буду пробовать, спасибо
источник

PG

Pavel Gassan in Powershell Rus
Тебе уже сказали что это антипаттерн? Либо твоя функция берет глобальные переменные, либо ты оперирует возвращаемым значение функции. Зачем в ней вообще что то делать глобальным?
источник

AF

Alexey D. Filimonov ... in Powershell Rus
Ну или экранируй через шапочку
Powershell -command "Write-Host ^"Hello, World^" ".

Ну или используй одинарные слеши там где это можно
источник

RH

Roman Holubenko in Powershell Rus
мне потом переменные из первой функции будут нужны во второй функции
источник