完全被困在这里,不知道该怎么做:我有一个多选交互式 Powershell 脚本,我正在为操作组合在一起,所以只要他们想在远程计算机上执行快速任务,他们就会节省几分钟。
我已经用 just 替换了所有其他选项的所有代码You have selected #
,所以我不会让任何人对其余的脚本内容感到厌烦,但是选择6
让我发疯。
这就是我的目标,但还不能超越第一个要点:
- 创建新
.vnc
文件 - 将文本的标准 VNC 协议正文添加到文件中
$ComputerName
之后添加Host=
- 启动文件
问题是下面根本不会创建文件;如果直接复制/粘贴到 Powershell 中,它可以工作,但它不会在脚本中运行!有谁知道为什么会这样?
$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
这听起来很像一个不合适的执行策略。你可以跑
Get-ExecutionPolicy
过去看看。它可能会返回Restricted
。要永久更改它,请运行提升的 PowerShell 并执行
Set-ExecutionPolicy RemoteSigned
并使用y
.要临时更改它以执行脚本,您可以像这样运行它:
因此,这就是您可以从脚本文件运行脚本的方式。除此之外,@jfrmilner已经提到了另一个问题。在您的第 6 个选项中,您正在通过附加的花括号定义另一个脚本块:
定义本身不会运行这些行。你有两种可能解决这个问题:
.
它将被执行:@Reg Edit 和 @Lee-Dailey 所说的同上。
我们看不到你的屏幕。
其次,你为什么期待...
...这在脚本中工作?
$commands 不是要执行的 .ps1,它是脚本中的一个脚本块。
您说您在 powershell.exe 控制台或 ISE 或 VSCode 中粘贴,它应该可以工作,因为您加载了代码并从现有的 PowerShell 实例运行它,并且在该实例中读取了代码。
因此,除非此代码保存为 commands.ps1,否则 &$commands 没有实际意义,因为代码从未加载到正在运行或调用的 PowerShell 实例中。
此外,实际上根本不需要该脚本块。
所以,试试这个...
执行 - -