脚本将其他脚本调用为 .ps1 但不是使用 ps2exe 的 .exe
Script calls other script as .ps1 but not as a .exe using ps2exe
$password = ConvertTo-SecureString “Password+++” -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ("Admin", $password)
$FileLocale = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
Write-Output $FileLocale
$AntFile = "$FileLocale\StartApps.ps1"
Write-Output $AntFile
Start-Process PowerShell.exe -ArgumentList "-command &$AntFile -UserCredential $Cred"
您好,该代码在 .ps1 中有效,我调用了另一个脚本,他成功了。但是当我在 ps2exe 的帮助下将它转换为 .exe 时,他不再做他的工作了。是否作为管理员。这不是我第一次使用该启动过程,但这是我第一次使用变量作为命令的目标。有谁知道 ps1 和 exe 之间出了什么问题?
谢谢
虽然使用 ps2exe 编译的可执行文件使用 .ps1
文件 作为输入 ,但 在运行时 没有实际涉及 .ps1
文件,这就是为什么 PowerShell 的 command-reflection 变量无法告诉您有关 运行 脚本的任何信息 file.
当 运行 实际 .ps1
文件 时,您将使用以下 about_Automatic_Variables:
$PSCommandPath
包含正在执行的 脚本文件 的完整文件路径。
$PSScriptRoot
包含脚本文件的完整目录路径(即脚本文件所在目录的完整路径)。
在 ps2exe 编译的可执行文件 (.exe
) 中,如果这些变量没有值,您可以改用以下内容:
[Environment]::GetCommandLineArgs()[0]
包含 可执行文件 的完整文件路径。
Split-Path -LiteralPath ([Environment]::GetCommandLineArgs()[0])
包含可执行文件的完整 目录 路径。
应用于您的代码 - 假设您的 .exe
文件旁边有一个单独的 StartApp.ps1
文件:[1]
$FileLocale = Split-Path -LiteralPath ([Environment]::GetCommandLineArgs()[0])
$AntFile = Join-Path $FileLocale StartApps.ps1
如果您想使您的代码在两种 调用场景 - 原始.ps1
文件直接以及已编译的 .exe
文件 - 使用以下内容:
$FileLocale =
if ($PSScriptRoot) { $PSScriptRoot }
else { Split-Path -LiteralPath ([Environment]::GetCommandLineArgs()[0]) }
$AntFile = Join-Path $FileLocale StartApps.ps1
[1] 请注意,在运行时 no 信息是可用的 original .ps1
作为 compile-time 输入 的文件最初位于 - 只有该文件的 content 成为 .exe
文件的一部分。
$password = ConvertTo-SecureString “Password+++” -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ("Admin", $password)
$FileLocale = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
Write-Output $FileLocale
$AntFile = "$FileLocale\StartApps.ps1"
Write-Output $AntFile
Start-Process PowerShell.exe -ArgumentList "-command &$AntFile -UserCredential $Cred"
您好,该代码在 .ps1 中有效,我调用了另一个脚本,他成功了。但是当我在 ps2exe 的帮助下将它转换为 .exe 时,他不再做他的工作了。是否作为管理员。这不是我第一次使用该启动过程,但这是我第一次使用变量作为命令的目标。有谁知道 ps1 和 exe 之间出了什么问题?
谢谢
虽然使用 ps2exe 编译的可执行文件使用 .ps1
文件 作为输入 ,但 在运行时 没有实际涉及 .ps1
文件,这就是为什么 PowerShell 的 command-reflection 变量无法告诉您有关 运行 脚本的任何信息 file.
当 运行 实际 .ps1
文件 时,您将使用以下 about_Automatic_Variables:
$PSCommandPath
包含正在执行的 脚本文件 的完整文件路径。$PSScriptRoot
包含脚本文件的完整目录路径(即脚本文件所在目录的完整路径)。
在 ps2exe 编译的可执行文件 (.exe
) 中,如果这些变量没有值,您可以改用以下内容:
[Environment]::GetCommandLineArgs()[0]
包含 可执行文件 的完整文件路径。Split-Path -LiteralPath ([Environment]::GetCommandLineArgs()[0])
包含可执行文件的完整 目录 路径。
应用于您的代码 - 假设您的 .exe
文件旁边有一个单独的 StartApp.ps1
文件:[1]
$FileLocale = Split-Path -LiteralPath ([Environment]::GetCommandLineArgs()[0])
$AntFile = Join-Path $FileLocale StartApps.ps1
如果您想使您的代码在两种 调用场景 - 原始.ps1
文件直接以及已编译的 .exe
文件 - 使用以下内容:
$FileLocale =
if ($PSScriptRoot) { $PSScriptRoot }
else { Split-Path -LiteralPath ([Environment]::GetCommandLineArgs()[0]) }
$AntFile = Join-Path $FileLocale StartApps.ps1
[1] 请注意,在运行时 no 信息是可用的 original .ps1
作为 compile-time 输入 的文件最初位于 - 只有该文件的 content 成为 .exe
文件的一部分。