我需要将标准输出和错误日志从几个进程收集到一个日志文件中.
因此,每个输出都必须附加到此日志文件.
我想用这样的行调用所有作业:
$p=start-process myjob.bat -redirectstandardoutput $logfile -redirecterroroutput $logfile -wait
Run Code Online (Sandbox Code Playgroud)
我需要在哪里附加信息?
git clone它的输出写到stderr作为记录在这里.我可以使用以下命令重定向它:
git clone https://myrepo c:\repo 2>&1
Run Code Online (Sandbox Code Playgroud)
但是这会将所有输出(包括错误)重定向stderr到stdout.有没有办法将进度消息重定向到stdout但仍然写入错误消息stderr.
当外部命令(例如 git)写入 stderr 时,PowerShell 会生成 NativeCommandError 异常。我想正常地看到输出和标准输出,类似于它在标准 UNIX/Linux 系统上的外观。此脚本需要运行许多本机命令,如果可能,我更喜欢不会给每个命令增加太多混乱和维护的解决方案。
在 Linux 上,可以这样检出分支:
$ git checkout devel
Branch 'devel' set up to track remote branch 'devel' from 'origin'.
Switched to a new branch 'devel'
Run Code Online (Sandbox Code Playgroud)
其中微妙的部分是,无论出于何种原因,最后一行都已写入 stderr。但是,git 的退出状态为零表示它成功了。在 PowerShell 下,我得到了这个:
PS> git checkout devel
Branch 'devel' set up to track remote branch 'devel' from 'origin'.
git : Switched to a new branch 'devel'
At line:1 char:1
+ git checkout devel
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Switched to a new branch 'devel':String) …Run Code Online (Sandbox Code Playgroud) 消息
Cloning into 'sub-mod'...
done.
Run Code Online (Sandbox Code Playgroud)
git submodule add...将命令写入stderr后。我希望该消息被写入标准输出,因为我不认为它表明命令出了问题。
我可以使用以下命令序列重现此内容:
rm -rf /tmp/repo /tmp/module
mkdir /tmp/repo /tmp/module
cd /tmp/module
git init > /dev/null
echo "foo" > foo;
git add foo > /dev/null
git commit . -m "+ foo" > /dev/null
cd /tmp/repo
git init > /dev/null
git submodule add /tmp/module/ sub-mod 1> /dev/null
Run Code Online (Sandbox Code Playgroud)
如果我将最后一个命令中的重定向更改为... 2> /dev/null,则不会打印任何内容。
如何解释来自调用"Git Clone"(实际使用GitLab)的PowerShell脚本的错误.我可以克隆一个空目录并使其工作而不会出错吗?
$path1 = "d:\GitPath"
$path2 = "${path1}\mycompany-mygroup-nealtestautomation01-map"
$gitLabHttp = "http://git.mycompany.com/MyGroup/nealtestscriptaddedproject.git"
$gitLabHttp = "http://git.mycompany.com/MyGroup/mycompany-gwcustomers-nealtestautomation01-map.git"
rd $path2
cd $path1
git clone $gitLabHttp --local --verbose
Run Code Online (Sandbox Code Playgroud)
输出:
git : Cloning into 'mycompany-mygroup-nealtestautomation01210-map'...
At D:\Scripts\GitCloneTest.ps1:7 char:1
+ git clone $gitLabHttp --local --verbose
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Cloning into '...mation01-map'...:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
warning: --local is ignored
warning: You appear to have cloned an empty repository.
Run Code Online (Sandbox Code Playgroud)
我想要使用此代码的任何更大的脚本,我包括:
$ErrorActionPreference = "Stop" #Special Poweshell Syntax to Stop on First Error
Run Code Online (Sandbox Code Playgroud)
这样它就会在第一个错误时停止.
即使我在一个非空的项目上运行它,我看到红色和类似于上面的错误(在此次运行中使用--local和--verbose): …
我第一次在我的电脑上乱搞git.我有一个存储库D:\MyProjectA\,还有一个裸存储库D:\MyProjectB\.然后我origin通过运行设置裸克隆remote add origin D:\MyProjectB.
现在我对MyProjectA进行了一些更改,并希望将它们推回原点.当我git push origin master在Powershell中运行时,我看到以下输出,但脚本没有退出.我必须按Ctrl-C才能关闭.这是怎么回事?
PS D:\MyProjectA> git push origin master
Counting objects: 3, done.
Delta compression using up to 16 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 290 bytes | 290.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
Run Code Online (Sandbox Code Playgroud) git fetch命令的输出test1从以下cmd 重定向到“ ”文件:
manish@rigved:~$ git fetch --all --prune > test1
From https://github.com/Beawel/wwwnew
x [deleted] (none) -> origin/test
Run Code Online (Sandbox Code Playgroud)
问题:但是x [deleted] ...输出中显示的“ ”行未重定向到test1,为什么?请提出建议。
为什么git命令会在stderr上打印明显不是错误消息的内容?
manish@rigved:~$ cat test1
Fetching origin
Run Code Online (Sandbox Code Playgroud)