Вы можете использовать кодировку Base64 для встраивания exe в сценарий PowerShell. Запустите этот скрипт для кодирования исполняемого файла. Он создает файл base64Decoder.ps1 в папке «Загрузки».
# Requires PowerShell 5.1
# Run this script to encode the exe.
# It produces 'base64Decoder.ps1' in the Downloads folder.
$folder = "$env:UserProfile\Downloads\Demo\"
$file = "PowerShell-7.0.0-win-x64.msi"
$option = [System.Base64FormattingOptions]::InsertLineBreaks
$path = Join-Path -Path $folder -ChildPath $file
$bytes = Get-Content $path -Encoding Byte -ReadCount 0
$outputProgram = [System.Text.StringBuilder]::new()
[void]$outputProgram.AppendLine( '$encodedText = @"' )
[void]$outputProgram.AppendLine( ([Convert]::ToBase64String($bytes, $option)) )
[void]$outputProgram.AppendLine( '"@' )
[void]$outputProgram.Append(
@"
`$downloads = Join-Path -Path `$Env:USERPROFILE -ChildPath "Downloads"
`$file = "$file"
`$path = Join-Path -Path `$downloads -ChildPath `$file
`$value = [System.Convert]::FromBase64String(`$encodedText)
Set-Content -Path `$path -Value `$value -Encoding Byte
"@
)
$downloads = Join-Path -Path $Env:USERPROFILE -ChildPath "Downloads"
$outFile = "base64Decoder.ps1"
$outPath = Join-Path -Path $downloads -ChildPath $outFile
Set-Content -Path $outPath -Value ($outputProgram.ToString())
Вы можете скопировать и вставить содержимое base64Decoder.ps1 в существующий сценарий PowerShell, чтобы встроить исполняемый файл. Или, если он слишком большой, включите base64Decoder.ps1 с исходным сценарием и вызывайте его при необходимости.
Запустите сценарий на целевом компьютере, чтобы воспроизвести исходный файл в папке «Загрузки». Это допустимый синтаксис PowerShell и может быть включен в сценарий.
& "$env:UserProfile\Downloads\base64Decoder.ps1"
Возможно, вам придется установить политику выполнения до запуска сценария.
Set-ExecutionPolicy RemoteSigned
Вызов exe с помощью Start-Process . Это может быть сохранено в сценарии.
Start-Process -FilePath "$env:UserProfile\Downloads\PowerShell-7.0.0-win-x64.msi" -ArgumentList '/? '
Если вы хотите отправить сценарий PowerShell по электронной почте, прикрепите его как .txt и попросите переименовать его. Я уверен, что вы знаете, что вложения файлов обычно ограничены 10 МБ.
Если exe доступен онлайн, вы можете использовать Invoke-WebRequest , что намного проще.
Invoke-WebRequest "https://github.com/PowerShell/PowerShell/releases/download/v7.0.0/PowerShell-7.0.0-win-x64.msi" -outfile "$env:UserProfile\Downloads\PowerShell-7.0.0-win-x64.msi"
Вы можете проверить эти шаги в Windows Песочница .
Хотя это технически правильный ответ на ваш вопрос, я не рекомендую это.
Во-первых, это сложнее, чем просто загрузить установщик из Inte rnet и использовать ( MSI ) его переключатели.
Во-вторых, производительность моего скрипта плоха для нетривиальных exe-файлов. И создаст больше проблем, чем решит .
Я не уверен, что предположение здесь. Но если эти компьютеры не управляются, я предполагаю, что будет запрос поддержки для каждой установки. То, что вы не сможете сделать, это просто отправить этот сценарий по электронной почте 100 людям или поместить его в сценарий входа в систему и уйти. Это было бы очень плохо . Даже если бы это было в офисе, я бы не развернул автоматическую установку без тщательного тестирования. И это при условии локального хранилища и сценария входа в систему или эквивалентного: не люди, работающие из дома как разовые.