小编San*_*eev的帖子

Powershell - 查找调用脚本的用户

我有一个脚本(我们称之为myPSScript.ps1),它采用两个参数并执行预定义的步骤.脚本位于Windows Server框中,人们登录并执行脚本.支持两个用户在给定时间登录.

我想找出谁调用了脚本.

(Get-WmiObject -Class Win32_Process | Where-Object {$_.ProcessName -eq 'explorer.exe'}).GetOwner() | Format-Table Domain, User 
Run Code Online (Sandbox Code Playgroud)

当用户当前登录并尝试运行脚本时,此方法有效.但是如果我在计划任务中有一个批处理文件并运行相同的脚本呢?

在这种情况下,同一个命令返回一个空异常,因为没有人登录到该机器.

有没有办法找出谁/哪个进程调用了powershell脚本.我依稀记得Start-Transcript记录从哪个用户运行命令,所以这应该是可能的?

谢谢!Sanjeev

powershell powershell-2.0 powershell-remoting

15
推荐指数
1
解决办法
2万
查看次数

PowerShell退出代码 - 从MSBuild调用

我正在从MSBuild调用PowerShell脚本.MSBuild能够捕获返回的输出,但认为项目已成功构建.

问题是PowerShell的退出代码没有传递给MSBuild中的命令.有人曾经试过这个并且能够向MSBuild抛出退出代码吗?

testmsbuild.proj

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="DesktopBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ScriptLocation>c:\scripts\test.ps1</ScriptLocation>
  </PropertyGroup>

  <Target Name="AfterDropBuild" >
        <Exec Command="powershell.exe -NoProfile -Noninteractive -command &quot;&amp; { $(ScriptLocation)%3Bexit $LASTEXITCODE }&quot; " >
        <Output TaskParameter="ExitCode" PropertyName="ErrorCode"/>
        </Exec>
   </Target>    

 </Project>
Run Code Online (Sandbox Code Playgroud)

test.ps1(当然这会出错)

function CallFromMSBuild {

   Invoke-command {Powershell.exe C:\a.ps1} -computername $computers
} 
Run Code Online (Sandbox Code Playgroud)

当触发MSBuild项目时,它应该已经发现问题并且构建应该失败(认为构建成功了)

当我从MSBuild打电话时

C:\Scripts>msbuild testmsbuild.proj /t:AfterDropBuild
Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.225]
Copyright (C) Microsoft Corporation 2007. All rights reserved.

Build started 4/28/2011 2:46:29 PM.
Project "C:\scripts\testmsbuild.proj" on node 1 (AfterDropBuild target(s)).
AfterDropBuild: …
Run Code Online (Sandbox Code Playgroud)

msbuild powershell

12
推荐指数
2
解决办法
1万
查看次数