在VBS的路径中运行PowerShell脚本



有人可以帮助您解决此脚本吗?基本上,它是由VBS运行的,并且为每个运行脚本的用户设置了选项。

该脚本在支持DOS 8.3文件系统的机器上工作,但是我们也有很多成像系统,并且没有此功能...

所以我毫不肯定地试图获得不支持8.3运行的机器。PowerShell不喜欢文件路径中的空间...,我正在尝试静静地运行脚本。

Objshell.Run "powershell.exe (gc c:users$env:USERNAMEMydocu~1Canadi~1FileImportSettings.config) -replace 'temp','serverblahblah' | out-file c:users$env:USERNAMEMydocu~1Canadi~1FileImportSettings.config",0

评论即将到来,所以我将其发布到原始帖子上。

我最初发布的内容是我尝试解决该问题的尝试的一部分,但不会运行。这是编辑的……但是,当我尝试将其更改为双重引用时,代码不再将用户名更改为%用户名%。我已经尝试直接运行该命令,并且CMD抱怨说超出文件不是公认的有效命令。

Wscript.echo "powershell.exe (gc ""c:users""$env:USERNAME""DocumentsCanadian...FileImportSettings.config"") -replace 'temp','serverblahblah' | out-file ""c:users""$env:USERNAME""DocumentsCanadian....FileImportSettings.config""",0

用powershell中的空格的文件名。

简单的powershell命令在(8.3别名)路径中没有空格:

==>powershell (gc .$env:USERNAMEyyyy.txt) -replace 'efg h','E FGH'
xxx1 abc D
xxx2 E FGH
xxx3 ijk L

为(长)文件名准备路径中的空格(字符串串联)。单引号标记导致字面价值回荡。双引号标记会导致变量回声的实际值):

powershell (gc $("'.'"+$env:USERNAME+"'yyyy.txt'")) -replace 'efg h','E FGH'

用路径中的空格替换( 8.3别名)路径:

powershell (gc $("'.'"+$env:USERNAME+"'yy yy.txt'")) -replace 'efg h','E FGH'

管道:|外文件。

我们必须逃脱下一个命令中的|管道字符,以将其转发至PoverShell;否则,它适用于 cmd shell带有 'out-file' is not recognized as an internal or external command, operable program or batch file错误。

powershell (gc $("'.'"+$env:USERNAME+"'yy yy.txt'")) -replace 'efg h','E FGH' ^| out-file $("'.'"+$env:USERNAME+"'yy yy.txt'")

vbscript。

将所有内部"双引号加倍。需要使用绝对路径作为另一个工作目录...

' 30064463
option explicit
Dim cmdLine, objShell
cmdLine = "powershell (gc $(""'D:bat'""+$env:USERNAME+""'yy yy.txt'"")) -replace 'efg h','E FGH' ^| out-file $(""'D:bat'""+$env:USERNAME+""'yy yy.txt'"")"
Wscript.Echo cmdLine
Set objShell = WScript.CreateObject("WScript.Shell")
Objshell.Run "cmd /C " & cmdLine, 1, true
Wscript.Quit

输出。

==>type  "D:BAT%username%yy yy.txt"
xxx1 abc D
xxx2 efg H
xxx3 ijk L
==>cscript D:VB_scriptsSO30064463.vbs
powershell (gc $("'D:bat'"+$env:USERNAME+"'yy yy.txt'")) -replace 'efg h','
E FGH' ^| out-file $("'D:bat'"+$env:USERNAME+"'yy yy.txt'")
==>type  "D:BAT%username%yy yy.txt"
xxx1 abc D
xxx2 E FGH
xxx3 ijk L
==>

最新更新