小编Aar*_*sen的帖子

为什么在使用MSBuild构建失败后,PowerShell的$ LastExitCode变量始终为0?

我注意到当MSBuild失败时,$ LastExitCode变量的值始终为0.我在Windows 7上,使用MSBuild v4.0和PowerShell 2.0.这是我的MSBuild scritpt:

<?xml version="1.0" encoding="UTF-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="Fail">
    <Target Name="Fail">
        <Error />
    </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

当我跑:

msbuild.exe MyProject.csproj
Run Code Online (Sandbox Code Playgroud)

我可以在输出中看到MSBuild失败,但是当我检查时$LastExitCode,它的值为0.任何人都知道可能会发生什么?

我试过设置$(ErrorActionPreference)Stop,但没有奏效.我重新打开了一个新的PowerShell窗口,它也没有用.

msbuild powershell

9
推荐指数
1
解决办法
6129
查看次数

告诉PowerShell ISE不要将stderr发送到Write-Error

当可执行文件写入标准错误流(stderr)时,PowerShell控制台和PowerShell ISE的行为会有所不同.控制台(powershell.exe)将其显示为标准输出.例如,当我在非存储库上获得Mercurial的状态时,它会写入标准错误:

> hg st -R C:\Windows
abort: repository C:\Windows not found!
Run Code Online (Sandbox Code Playgroud)

但是,在PowerShell ISE(powershell_ise.exe)中,该错误将传递给PowerShell的Write-Errorcmdlet:

> hg st -R C:\Windows
hg.exe : abort: repository C:\Windows not found!
At line:1 char:3
+ hg <<<<  st -R C:\Windows
    + CategoryInfo          : NotSpecified: (abort: repository C:\Windows not found!:String) [], RemoteExcepti 
   on
    + FullyQualifiedErrorId : NativeCommandError
Run Code Online (Sandbox Code Playgroud)

有没有办法将ISE配置为像控制台一样,而不是将stderr流发送到Write-Error

powershell powershell-ise

9
推荐指数
2
解决办法
1239
查看次数

配置Visual Studio以使用系统安装的Git.exe

Visual Studio 2017附带了自己的Git版本.不幸的是,它不支持SSH,并且它不包括发行者的根证书,用于保护我们的存储库的SSL证书.因此,每当我们尝试克隆,拉动或推送时,我们都会收到此错误:

克隆远程存储库时遇到错误:Git失败并出现致命错误.致命:无法访问"https://********/":SSL证书问题:无法获取本地颁发者证书

看起来Visual Studio 2017附带了自己的Git版本.最新版本的Git,2.12.2通过在验证SSL证书时添加对查看Windows证书存储区的支持来修复上述问题.反正有没有配置Visual Studio使用全球安装的Git版本?如果解决方案适用于Visual Studio版本,则可获得奖励积分.

git visual-studio-2017

9
推荐指数
3
解决办法
2964
查看次数

使用Wmi win32_Process进行远程进程执行 - 获取进程的标准输出

您好我能够使用Wmi执行远程进程,并能够获得进程的返回值和进程ID.有没有办法获得由Wmi开始的过程输出.例如.如果我启动一个exe在控制台中打印的东西,我将能够使用此Api获取这些值.任何帮助表示赞赏.

c# wmi

6
推荐指数
1
解决办法
1595
查看次数

为什么创建X509Certificate2对象时出现“拒绝访问”错误?

我们有一些单元测试,其中嵌入了PFX证书。这些证书在测试执行期间被读取并变成X509Certificate2对象。不幸的是,当以非特权用户身份运行时,我们会遇到以下Access Denied异常:

using (var s = EmbeddedResourceUtilities.GetEmbeddedResourceAsStream(typeThatContainsEmbeddedResource, certFileName))
{
    if (s == null)
    {

        throw new ApplicationException(String.Format("Embedded certificate {0} for type {1} not found.", certFileName, typeThatContainsEmbeddedResource.FullName));
    }

    try
    {
        var bytes = new byte[s.Length];
        s.Read(bytes, 0, (int)s.Length);
        return new X509Certificate2(bytes);
    }
    catch (Exception ex)
    {
        throw new ApplicationException(String.Format("Error loading embedded certificate {0} for type {1}.", certFileName, typeThatContainsEmbeddedResource.FullName), ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是例外:

System.Security.Cryptography.CryptographicException:访问被拒绝。
在System.Security.Cryptography.CryptographicException.ThrowCryptographicException(的Int32小时)
在System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(字节[] RAWDATA,IntPtr的密码,UInt32的dwFlags中,布尔persistKeySet,SafeCertContextHandle&pCe​​rtCtx)
在System.Security.Cryptography .X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte [] rawData,对象密码,X509KeyStorageFlags keyStorageFlags),
位于System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte [] rawData)

我试图修改构造函数以使用空密码和显式键集标志,但这不能解决问题:

// this …
Run Code Online (Sandbox Code Playgroud)

.net x509certificate2 x509certificate

6
推荐指数
2
解决办法
9188
查看次数

如何重新运行构建?

我们所有的Jenkins作业都配置为在存储库中的所有分支上构建更改.有时我们想要重新运行针对特定提交运行的特定构建.

  • 构建失败,因为某些外部资源不可用,我们希望在资源再次启动时重新运行该提交;
  • 工作取决于内部包,我们需要能够重新构建特定的分支以获取该包的最新版本.

然而,Jenkins的"立即构建"命令构建在最后一个构建的分支上.它不允许用户选择要构建的分支.为了重建分支,用户必须提交并推送对该分支的更改.

是否有一个允许用户重新运行特定版本或选择要构建的分支的插件?如果你使用过TeamCity,我想要"重新运行相同的版本"功能.

我们尝试过Naginator和Rebuilder插件.Naginator只允许您重建失败的构建,但也会自动重新构建失败的构建至少一次(不可取).Rebuilder始终重建最后一次提交.它的行为就像"立即构建"按钮.

jenkins jenkins-plugins

6
推荐指数
1
解决办法
8439
查看次数

命名分支之间合并的Mercurial日志

我有一个PowerShell脚本,可以找到将两个命名分支合并在一起的修订版.它遍历特定​​分支上的所有合并,显示在另一个命名分支上具有父级的变更集.

有没有相同的hg log命令?我玩过Mercurial的revsets功能(hg help revsets),但似乎无法找到神奇的咒语.

mercurial

5
推荐指数
1
解决办法
785
查看次数

如何在PowerShell中向.NET对象添加事件处理程序?

我正在编写一个使用第三方库的PowerShell脚本.我正在使用的一个对象要求我添加一个事件处理程序. 事件委托如下所示:

public delegate void TSBPGPCreateOutputStreamEvent(object Sender, 
                                                   string Filename, 
                                                   System.DateTime TimeStamp, 
                                                   ref System.IO.Stream Stream, 
                                                   ref bool FreeOnExit)
Run Code Online (Sandbox Code Playgroud)

在PowerShell中,我试过这样做:

$reader.Add_OnCreateOutputStream( {
    param(
        $sender,
        $fileName,
        $timestamp,
        [ref]
        $stream,
        [ref]
        $freeOnExit
    )
    $stream = New-Object IO.MemoryStream
} )
Run Code Online (Sandbox Code Playgroud)

但我收到此错误消息:

 Cannot convert value "
    param(
        $sender,
        $fileName,
        $timestamp,
        [ref]
        $stream,
        [ref]
        $freeOnExit
    )
$stream = New-Object IO.MemoryStream
" to type "SBPGP.TSBPGPCreateOutputStreamEvent". 
Error: "The type 'System.IO.Stream&' may not be used as a type argument."
Run Code Online (Sandbox Code Playgroud)

订阅活动有更好的方法吗?为什么Stream类型不能用作类型参数?我究竟做错了什么?

powershell

5
推荐指数
1
解决办法
8181
查看次数

什么是cvtres.exe?

当我使用aspnet_compiler.exe预编译我的网站时,我看到了一个cvtres.exe进程csc.exe.我假设这是.NET编译过程的一部分,并且在编译我的.NET程序集时也会显示.是什么cvtres.exe以及它做了什么?

.net c# csc

5
推荐指数
1
解决办法
9011
查看次数

在两个PowerShell阵列中查找常见项

我知道已经有一些堆栈溢出问题,但我已经尝试了很多解决方案并且不断出现同样的错误.问题是这样的:

我有2个数组(每个索引代表一个文件夹)

$originDirsArr = @(2, 257, 256, 3, 4, 10)
$tempDirArr = @(2, 257, 256, 3, 4)
Run Code Online (Sandbox Code Playgroud)

我想再次比较$ arr2 $ arr1,如果$ arr1中有东西不在$ arr2中,则删除它.即,在这种情况下,$ arr2中的10个DNE,因此该文件夹应该被删除.

这是我尝试过的:

$c = Compare-Object -ReferenceObject ($originDirsArr) `
 -DifferenceObject ($tempDirArr) -Passthru
$c
Run Code Online (Sandbox Code Playgroud)

也:

while ($t -lt $originDirsArr.length){
$originDirsArr[$t]
    if ( $tempDirArr -notContain $originDirsArr[$t]){
        "$_ does not exist in original and needs to be deleted"
    }else{
        "$_ does still exist in the temp"
    }
    $t++
}
Run Code Online (Sandbox Code Playgroud)

最后:

Compare-Object $originDirsArr $tempDirArr | ForEach-Object { $_.InputObject }
Run Code Online (Sandbox Code Playgroud)

每次我不断得到某种错误,无论是ReferenceObject还是DifferenceObject都是null.我知道它不是null因为我可以打印出内容,即使在那个例子中在t上编入索引,我仍然有内容.

在先进的感谢,任何帮助将不胜感激!

arrays powershell

3
推荐指数
1
解决办法
6482
查看次数