我知道这听起来可能像以前在这里提出的一个问题(部分是正确的)。但我在这里有一个有趣的转折。
所需的流程:
从CMD运行Powershell脚本。似乎很琐碎,而且实际上正在工作,传递参数等等.
但是..。
我的powershell脚本有一个Start-作业,因为我希望它能运行异步。
#######################################################################
#$DropLocation = "SOME UNC PATH"
#$buildid = "SOME VERSION"
param (
[parameter(Mandatory = $true)][string]$DropLocation,
[parameter(Mandatory = $true)][string]$buildid
)
Start-Job -Name Upload `
-ScriptBlock {
param (
[parameter(Mandatory = $true)][string]$DropLocation,
[parameter(Mandatory = $true)][string]$buildid
)
Write-Output "asd"
$buildpath = $DropLocation+"\"+$buildid
$logs = gci $buildpath"\logs" -Name "ActivityLog.AgentScope*.xml"
#Start-Sleep -Seconds 300
if ($logs.PSPath -gt 0)
{
$destination = $env:TEMP+"\Config\"
Copy-Item $logs.PSPath "$destination $buildid.xml"
}
} `
-ArgumentList $DropLocation,$buildid
#######################################################################我使用Param从外部摄取,然后再一次在开始-作业中,以便异步作业得到它的params。
这个脚本被保存为SCRIPTNAME.ps1,我正在尝试从CMD运行它。
来自cmd的(以管理方式运行)
powershell "& "C:\temp\SCRIPTNAME.ps1" "SOME UNC PATH" "SOME VERSION""或
powershell -file "C:\temp\SCRIPTNAME.ps1" "SOME UNC PATH" "SOME VERSION"什么都没发生。
然而,从PowerShell ISE看,一切都运行良好。
我们非常感谢你们的帮助!
发布于 2019-12-23 22:10:45
powershell -noexit ". C:\temp\SCRIPTNAME.ps1"
这将改变作业的源函数的作用域,使其在当前运行的脚本范围内工作,同时允许您运行多个线程。
发布于 2019-12-23 01:00:52
根据所提供的脚本,我对您的问题的看法是,您的脚本在完成作业之前退出。
--
这两种行为都是并排的
ISE / VSCode
launched
CMD
通过cmd
若要防止会话在作业完成之前被终止,请在脚本Receive-Job -Name 'upload' -Wait的末尾添加以下行
下面是修改后的新脚本。
#######################################################################
#$DropLocation = "SOME UNC PATH"
#$buildid = "SOME VERSION"
param (
[parameter(Mandatory = $true)][string]$DropLocation,
[parameter(Mandatory = $true)][string]$buildid
)
Start-Job -Name Upload `
-ScriptBlock {
param (
[parameter(Mandatory = $true)][string]$DropLocation,
[parameter(Mandatory = $true)][string]$buildid
)
Write-Output "asd"
$buildpath = $DropLocation+"\"+$buildid
$logs = gci $buildpath"\logs" -Name "ActivityLog.AgentScope*.xml"
#Start-Sleep -Seconds 300
if ($logs.PSPath -gt 0)
{
$destination = $env:TEMP+"\Config\"
Copy-Item $logs.PSPath "$destination $buildid.xml"
}
} `
-ArgumentList $DropLocation,$buildid
# Prevent the session to be killed before the job return.
Receive-Job -Name 'upload' -Wait
#######################################################################发布于 2019-12-23 08:54:52
在不了解环境的配置文件/策略配置的情况下,我是否可以建议在下面的示例中使用配置文件/策略修饰符调用?有时,它们可以通过批处理执行powershell,从而实现所有的不同。
您是否尝试过在批处理中编写、生成和执行powershell脚本?
每当我需要powershell做cmd不能做的事情时,我就会将脚本编写为可以从批处理文件中调用的函数。
下面是我的方法的一个例子:
:createshortcut
(
ECHO # Create a Shortcut with Windows PowerShell
ECHO $SourceFileLocation = "%ShortcutTargetPATH%"
ECHO $ShortcutLocation = "%userprofile%\Desktop\%shortcutname%.Ink"
ECHO #New-Object : Creates an instance of a Microsoft .NET Framework or COM object.
ECHO #-ComObject WScript.Shell: This creates an instance of the COM object that
represents the WScript.Shell for invoke CreateShortCut
ECHO $WScriptShell = New-Object -ComObject WScript.Shell
ECHO $Shortcut = $WScriptShell.CreateShortcut($ShortcutLocation^)
ECHO $Shortcut.TargetPath = $SourceFileLocation
ECHO $Shortcut.IconLocation = "%IconPATH%\%IconNameEXT%"
ECHO #Save the Shortcut to the TargetPath
ECHO $Shortcut.Save(^)
) >%AppDataPATH%\%PowerShellnameEXT%
TIMEOUT 1 >nul
Powershell.exe -NoProfile -ExecutionPolicy Bypass -File %AppDataPATH%\%PowerShellnameEXT%
TIMEOUT 1 >nul
DEL /Q "%AppDataPATH%\%PowerShellnameEXT%"
GOTO :EOF设置脚本执行所需的值&然后调用函数即可。在使用这种方法时,要记住的关键是在编写.ps1文件时逃离适当的字符
https://stackoverflow.com/questions/59406810
复制相似问题