更改当前正在运行的脚本

时间:2018-06-19 19:00:01

标签: powershell menu

是否可以将文本添加到当前运行脚本的脚本的特定部分?

如果我有一个带有选项的菜单:

  • 全部安装
  • 添加项目
  • 退出

    可以添加项目吗?

学习使用powershell(批量用户)。

输入“添加项目”时,将弹出read-host,在“重新启动”脚本之后,在### addwifi -wnm $USERINPUT的长行之间添加一行。

当前脚本:

#cmd: title Add****
$host.ui.RawUI.WindowTitle = "Add Wi-Fi networks"
#When Show-Menu –Title 'SetupWi-Fi' is called
function Show-Menu
{
# NOTE if changing warible from somewhere else (Show-Menu -WARIBLE VALUE) then param part must be included
    param (
        [string]$Title = 'SetupWi-Fi'
    )
    Clear-Host
    #cls and echo on @echo off
    Write-Host "================ $Title ================"

    Write-Host "a: Add Wi-Fi networks."
    Write-Host "q: Quit."
}
#Do this until x

#For future shortening purposes
function addwifi
{
    param (
        [string]$wnm
        #wnm= wifi name
    )
    netsh wlan add profile filename="$wnm.xml"
    #for some reason (nice for this script) . stops the warible name
}

do
 {
 # call Show-Menu and optionally change varible: –Title 'Warible' changes the $title varible
     Show-Menu
     # makin varible chaase equal user input, placing Selection before it
     $chaase = Read-Host "Selection:"
     #switch according to the varible chaase
     switch ($chaase)
     {
         'a' {
            #'single quote' acts as echo, now executing commands of 'a' varible
             'Adding Wi-Fi networks.'
             $host.ui.RawUI.WindowTitle = "Adding Wi-Fi networks"
             #note the upper function is called with warible
             #add below here! #####################################################################
             addwifi -wnm laptopidee
             #add above here! #####################################################################
         }
         #close a execution
         #close switch
     }
#close do
 }
#until x: selection == input q
 until ($chaase -eq 'q')

2 个答案:

答案 0 :(得分:0)

是的。将外部文件用作要导入的源。“添加项目”菜单选项创建另一个文件,以供下次执行时读取。

许多人使用.ini文件保存参数来处理批处理文件。类似的构造。

答案 1 :(得分:0)

一种可能性是使用在运行时替换的占位符,尽管我不确定它在多大程度上适合更复杂的脚本。

例如,如果您具有以下脚本:

$scriptPath = "$PsScriptRoot\$($MyInvocation.MyCommand.Name)"   
$scriptContent = Get-Content "$PsScriptRoot\$($MyInvocation.MyCommand.Name)" -Raw

$newItem = Read-Host "Please enter new command"

##Placeholder

$scriptContent -replace "$([char]0x0023)$([char]0x0023)Placeholder", "$([char]0x0023)$([char]0x0023)Placeholder$([char]0x000D)$([char]0x000A)$newItem" |
    Set-Content -Path $scriptPath

每次运行它时,都会提示您输入一个新命令,该命令将添加到##Placeholder下。因此,如果在出现提示时输入Get-Process,该脚本将最终像这样在磁盘上结束:

$scriptPath = "$PsScriptRoot\$($MyInvocation.MyCommand.Name)"
$scriptContent = Get-Content "$PsScriptRoot\$($MyInvocation.MyCommand.Name)" -Raw

$newItem = Read-Host "Please enter new command"

##Placeholder
Get-Process

$scriptContent -replace "$([char]0x0023)$([char]0x0023)Placeholder", "$([char]0x0023)$([char]0x0023)Placeholder$([char]0x000D)$([char]0x000A)$newItem" |
    Set-Content -Path $scriptPath

下次运行脚本时,系统将提示您输入新命令,该命令将添加到列表中,并且将执行列表中已存在的所有命令。