Totalmente preso aqui e não tenho ideia do que fazer: tenho um script Powershell interativo de múltipla escolha que estou montando para as operações, para que eles economizem alguns minutos sempre que quiserem executar tarefas rápidas em computadores remotos.
Substituí todo o código de todas as outras opções por apenas You have selected #
, para não aborrecer ninguém com o restante do conteúdo do script, mas a escolha 6
está me deixando louco.
É isso que pretendo fazer, mas ainda não consigo passar do primeiro ponto:
- Criar novo
.vnc
arquivo - Adicione o corpo de texto do protocolo VNC padrão ao arquivo
- Adicionar
$ComputerName
depoisHost=
- Inicie o arquivo
O problema é que o seguinte não criará o arquivo; se copiar/colar diretamente no Powershell, funcionará, mas não será executado em um script! Alguém sabe por que isso poderia ser?
$commands = {
function Show-Menu
{
param (
[string]$Title = 'My Menu'
)
Clear-Host
Write-Host "================ $Title ================"
Write-Host "1: Press '1' (Description)."
Write-Host "2: Press '2' (Description)."
Write-Host "3: Press '3' (Description)."
Write-Host "4: Press '4' (Description)."
Write-Host "5: Press '5' (Description)."
Write-Host "6: Press '6' To start a VNC Connection."
Write-Host "Q: Press 'Q' to quit."
}
Show-Menu –Title 'My Menu'
$selection = Read-Host "Please make a selection"
switch ($selection)
{
'1' {
"You have selected 1"
sleep -seconds 2
} '2' {
"You have selected 2"
sleep -seconds 2
} '3' {
"You have selected 3"
sleep -seconds 2
} '4' {
"You have selected 4"
sleep -seconds 2
} '5' {
"You have selected 5"
sleep -seconds 2
} '6' {
$ComputerName = (Read-Host "ComputerName")
{
New-Item -Path "C:\Windows\Temp\$ComputerName.VNC"
Set-Content "C:\Windows\Temp\$ComputerName.VNC" '
[connection]
host=$ComputerName
port=5900
[options]
use_encoding_1=1
copyrect=1
viewonly=0
fullscreen=0
8bit=0
shared=1
belldeiconify=0
disableclipboard=0
swapmouse=0
fitwindow=0
cursorshape=1
noremotecursor=0
preferred_encoding=7
compresslevel=-1
quality=6
localcursor=1
scale_den=1
scale_num=1
local_cursor_shape=1'
}
} 'q' {
#Closes the script
return
}
}
.$commands
}
&$commands
Isso soa muito como uma política de execução inadequada. Você pode correr
Get-ExecutionPolicy
para verificar isso. Provavelmente retornaRestricted
.Para alterar isso permanentemente, execute um PowerShell elevado e execute
Set-ExecutionPolicy RemoteSigned
e confirme comy
.Para alterar isso temporariamente apenas para a execução do seu script, você pode executá-lo assim:
Então, é assim que você pode executar seu script a partir de um arquivo de script. Além disso, existe outro problema, já citado por @jfrmilner . Na sua 6ª opção, você está definindo outro bloco de script pelas chaves adicionais:
A própria definição não executará essas linhas. Você tem duas possibilidades para resolver este problema:
.
e ele será executado:Idem para o que @Reg Edit e @Lee-Dailey estão dizendo.
Não podemos ver sua tela.
Em segundo lugar, por que você esperaria...
...isso funciona em um script?
$commands não é um .ps1 para executar, é um scriptblock em seu script.
Você diz que está colando no console powershell.exe ou no ISE ou VSCode, deve funcionar porque você carregou o código e o executou de uma instância existente do PowerShell e o código foi lido nessa instância.
Portanto, a menos que esse código seja salvo como commands.ps1, &$commands é discutível porque o código nunca é carregado em uma instância do PowerShell em execução ou chamada.
Além disso, esse scriptblock não é realmente necessário.
Então, tente isso...
Executar ---