在vbscript中嵌入powershell

在vbscript中嵌入powershell,powershell,vbscript,embed,Powershell,Vbscript,Embed,我有一个powershell脚本,我使用.vbs文件调用它。这减少了用户每次转到cmd、键入powershell然后调用.ps1文件时的工作量。 vbs脚本在调用ps1文件的新cmd窗口中直接打开powershell VB脚本是: Set objShell = CreateObject("Wscript.Shell") objShell.Run("powershell.exe -noexit C:\Scripts\anydrive.ps1") 我现在想要实现的是,我能将.ps1文件嵌入.vbs

我有一个powershell脚本,我使用.vbs文件调用它。这减少了用户每次转到cmd、键入powershell然后调用.ps1文件时的工作量。 vbs脚本在调用ps1文件的新cmd窗口中直接打开powershell

VB脚本是:

Set objShell = CreateObject("Wscript.Shell")
objShell.Run("powershell.exe -noexit C:\Scripts\anydrive.ps1")
我现在想要实现的是,我能将.ps1文件嵌入.vbs文件中吗?这样我就有了一个.vbs文件,可以分发给用户,而不是两个单独的文件。

是的 你可以按你的要求去做。最简单的方法是将其编码为base64字符串,可能类似这样(这是一次性的):

$script=获取内容C:\Scripts\anydrive.ps1-Raw
$bytes=[System.Text.Encoding]::Unicode.GetBytes($script)
$encoded=[Convert]::ToBase64String($bytes)
$encoded | clip#将其复制到剪贴板
然后将其粘贴到已编码的VBScript中

您可以这样称呼powershell:

powershell.exe-NoExit-EncodedCommand$e
$e
在本例中是指编码的命令字符串或包含该字符串的VBscript变量)

但是,为什么? 如果您不希望用户必须打开powershell并手动加载文件,并且您希望用户可以双击某些内容,为什么不为他们创建一个快捷方式呢?快捷方式的目标与您从VBscript调用的命令行完全相同。

Yes 你可以按你的要求去做。最简单的方法是将其编码为base64字符串,可能类似这样(这是一次性的):

$script=获取内容C:\Scripts\anydrive.ps1-Raw
$bytes=[System.Text.Encoding]::Unicode.GetBytes($script)
$encoded=[Convert]::ToBase64String($bytes)
$encoded | clip#将其复制到剪贴板
然后将其粘贴到已编码的VBScript中

您可以这样称呼powershell:

powershell.exe-NoExit-EncodedCommand$e
$e
在本例中是指编码的命令字符串或包含该字符串的VBscript变量)

但是,为什么? 如果您不希望用户必须打开powershell并手动加载文件,并且您希望用户可以双击某些内容,为什么不为他们创建一个快捷方式呢?快捷方式的目标与您从VBscript调用的命令行完全相同。

Yes 你可以按你的要求去做。最简单的方法是将其编码为base64字符串,可能类似这样(这是一次性的):

$script=获取内容C:\Scripts\anydrive.ps1-Raw
$bytes=[System.Text.Encoding]::Unicode.GetBytes($script)
$encoded=[Convert]::ToBase64String($bytes)
$encoded | clip#将其复制到剪贴板
然后将其粘贴到已编码的VBScript中

您可以这样称呼powershell:

powershell.exe-NoExit-EncodedCommand$e
$e
在本例中是指编码的命令字符串或包含该字符串的VBscript变量)

但是,为什么? 如果您不希望用户必须打开powershell并手动加载文件,并且您希望用户可以双击某些内容,为什么不为他们创建一个快捷方式呢?快捷方式的目标与您从VBscript调用的命令行完全相同。

Yes 你可以按你的要求去做。最简单的方法是将其编码为base64字符串,可能类似这样(这是一次性的):

$script=获取内容C:\Scripts\anydrive.ps1-Raw
$bytes=[System.Text.Encoding]::Unicode.GetBytes($script)
$encoded=[Convert]::ToBase64String($bytes)
$encoded | clip#将其复制到剪贴板
然后将其粘贴到已编码的VBScript中

您可以这样称呼powershell:

powershell.exe-NoExit-EncodedCommand$e
$e
在本例中是指编码的命令字符串或包含该字符串的VBscript变量)

但是,为什么?

如果您不希望用户必须打开powershell并手动加载文件,并且您希望用户可以双击某些内容,为什么不为他们创建一个快捷方式呢?快捷方式只针对您从VBscript调用的完全相同的命令行。

通过嵌入,我的意思是,.ps1的整个代码可以以某种方式用于.vbs文件本身或任何其他逻辑,最终只剩下一个文件。希望我的查询清楚。您可能可以将内容保存为字符串,并将该字符串作为参数发送到
-command
参数。问题是,为什么不使用一个或另一个…?我之前只使用了.ps1文件,但每次显式打开powershell都会让我办公室的用户有点恼火。通过给他们.vbs文件,他们现在只需要双击.vbs文件,该文件在后端调用.ps1文件并为他们提供.ps1菜单。我明白了。无论你在powershell中做什么,你几乎可以肯定的是,你也可以用vbscript在本机上做,所以你可能会把事情复杂化。谷歌是你的朋友。是的,你可以通过嵌入调用,我的意思是,.ps1的整个代码可以在.vbs文件中使用,或者通过任何其他逻辑使用,最终只剩下一个文件。希望我的查询清楚。您可能可以将内容保存为字符串,并将该字符串作为参数发送到
-command
参数。问题是,为什么不使用一个或另一个…?我之前只使用了.ps1文件,但每次显式打开powershell都会让我办公室的用户有点恼火。通过给他们.vbs文件,他们现在只需要双击.vbs文件,该文件在后端调用.ps1文件并为他们提供.ps1菜单。我明白了。无论你在powershell中做什么,你几乎可以肯定的是,你也可以用vbscript在本机上做,所以你可能会把事情复杂化。谷歌是你的朋友。是的,你可以通过嵌入调用,我的意思是,.ps1的整个代码是否可以在.vbs文件中使用,或者是否可以被最终离开我的任何其他逻辑使用