标签: powershell

Git哈希对象在Powershell,CMD和Bash中产生不同的SHA1?

我认为无论平台如何,SHA1值都是相同的.我今天遇到了这个,希望我能在这里得到一些澄清.

我的测试字符串是: 'Apple Pie'

在Bash:

echo 'Apple Pie' | git hash-object --stdin
23991897e13e47ed0adb91a0082c31c82fe0cbe5
Run Code Online (Sandbox Code Playgroud)

在CMD(Windows 10)中:

echo 'Apple Pie' | git hash-object --stdin
f554ff1fdde0e3c2ca9f67849791456302b5c12b
Run Code Online (Sandbox Code Playgroud)

在Powershell 5.0(Windows 10)中:

echo 'Apple Pie' | git hash-object --stdin
157cb7be4778a9cfad23b6fb514e364522167053
Run Code Online (Sandbox Code Playgroud)

我现在很困惑git如何在这里工作,因为文件内容的sha1键在不同的环境中是非常不同的,我不确定如果我将一个项目克隆到我的在Powershell中构建的linux机器中它是否会起作用?这种行为一般是在git或SHA1中预期的吗?

git bash powershell hash sha1

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

如何捕获文件未找到错误?

我正在使用Powershell并尝试使用remove-item。通常,在我的场景中该文件将不存在,并且会生成一个错误,并在我的输出中出现6行红色文本。那是非常破坏性的,在这种情况下,我不想看到任何东西。但是,如果还有其他错误,例如由于正在使用而无法删除文件,那么我想看看该错误。我以为我可以使用两个catch语句:一个带有[filenotfoundexception]或类似的东西,另一个带有没有异常类型的东西来获取其他所有内容。但是,错误文本中的任何代码都不能用作异常类型:“无法找到类型”。解决这个问题的正确方法是什么?

error-handling powershell

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

将string []从批处理文件(其中包含双引号“)传递到powershell脚本

我有一个具有string[]参数的powershell脚本,并尝试从批处理文件中将值传递给它

PowerShell脚本

[string[]]$ScriptArgs
Run Code Online (Sandbox Code Playgroud)

批处理文件

powershell -File Foobar.ps1 -ScriptArgs -versn="""1.0.0.0""",pattern="""FooBar.*"""
Run Code Online (Sandbox Code Playgroud)

(3个引号-用于转义/显示1个引号)

但是无论我做什么Write-Host $ScriptArgs.Count打印1

我希望变量接收2个元素

[0]-versn="1.0.0.0"
[1]-pattern="FooBar.*"


在批处理文件中,我什至尝试单独设置变量

set @sArgs = -versn="""1.0.0.0"""
set @sArgs = %sArgs%;-pattern="""FooBar.*"""
powershell -File Foobar.ps1 -ScriptArgs %sArgs%
Run Code Online (Sandbox Code Playgroud)

但是控制台会以某种方式运行,就像未创建变量一样,并以

powershell -File Foobar.ps1 -ScriptArgs
Run Code Online (Sandbox Code Playgroud)

并引发错误

缺少参数'ScriptArgs'的参数。指定类型的参数,System.String[]然后重试

我应该改变些什么来实现这一目标?

c# powershell cakebuild

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

如果Powershell中的/ Else没有按预期运行?

有人可以向我解释为什么下面没有按预期工作?在下面的例子中,我希望$shortFQDN变量被设置为test.com,但我回来了www.test.com:

$fqdn = 'dev.www.test.com'
$d3 = $fqdn.Split('.')[-3] #www
$d2 = $fqdn.Split('.')[-2] #website
$d1 = $fqdn.Split('.')[-1] #com

#Check if this is a 2LD domain (.com.au, .co.uk, .co.jp, etc.)
if ($d1 -ne 'com' -or 'net' -or 'org' -or 'edu' -or 'gov' -or 'biz') {
    $shortFQDN = -join ("$d3",'.',"$d2",'.',"$d1")
} else {
    $shortFQDN = -join ("$d2",'.',"$d1")
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?似乎if/else处理不正确...

powershell

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

我什么时候可以在我的Powershell命令中使用换行符(换行符)来提高可读性

我怎么知道何时可以在Powershell脚本中使用New Lines/Carriage返回?搜索此答案时的所有搜索结果都指向输出.我不关心这种情况下的输出.我更感兴趣的是能够格式化我的Powershell脚本以提高可读性.

例如.下面是两个版本的Powershell命令行.一个工作,一个不工作.在这种情况下,命令的作用并不重要.关键是我需要知道什么时候我被允许创建一个新的行,而当我不是.

这个命令行工作,因为它只是一个很长的单行:

& 'C:\Program Files\ArangoDB3 3.3.3\usr\bin\arangoimp.exe' --file 'C:\Program Files\ArangoDB3 3.3.3\usr\bin\tstImportJSON.json' --type json --collection users --progress true --overwrite true --server.username root --server.password password
Run Code Online (Sandbox Code Playgroud)

由于脚本中间有一个新行,因此该命令行不起作用.

& 'C:\Program Files\ArangoDB3 3.3.3\usr\bin\arangoimp.exe' --file 
'C:\Program Files\ArangoDB3 3.3.3\usr\bin\tstImportJSON.json'
--type json --collection users --progress true --overwrite true
--server.username root --server.password password
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我只是在添加换行符后运行相同命令行的不同版本,以查看它们是否有效.我知道在使用IF语句时我可以开始新行.在管道对象时我也可以使用新行.我的假设是,某处有一个Powershell脚本规则列表.当我最初开始进入Powershell时,我以为我曾经在某个地方看到过它们,但现在还没有任何线索.

syntax powershell newline code-formatting

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

为什么反转arraylist没有显示任何结果?

我试图反转队列并使其成为堆栈.但它没有显示任何输出.

$queue = [System.Collections.ArrayList]@()

$queue.Add("Object1") | Out-Null
$queue.Add("Object2") | Out-Null
"=========== Queue ================"
foreach ($i in $queue) {
    $i
}

$stack = $queue.Reverse()
"=========== stack ================"
foreach ($i in $stack) {
    $i
}
Run Code Online (Sandbox Code Playgroud)

我期待如下结果

=========== Queue ================
Object1
Object2
=========== stack ================
Object2
Object1
Run Code Online (Sandbox Code Playgroud)

但是堆栈结果没有给出如下任何值

=========== Queue ================
Object1
Object2
=========== stack ================
Run Code Online (Sandbox Code Playgroud)

这有什么不对?怎么纠正呢?

powershell arraylist

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

没有-blob参数的Get-AzureStorageBlob返回图像两次

Get-AzureStorageBlob当我省略-blob 参数(以检索所有图像)时,似乎cmdlet返回两个具有相同名称(但不同的ContentType )的项:

现在,当我使用Where-Objectcmdlet按名称检索特定blob时,我得到两个blob:

在此输入图像描述

如果我在Get-AzureStorageBlobcmdlet中指定blob名称,我只返回一个文件:

在此输入图像描述

这种行为是否合适?此外,在Azure存储资源管理器中,我只看到一个项目.

这是没有-blob参数的请求的样子:

GET https://XXX.blob.core.windows.net/XXX?restype=container&comp=list&prefix=&maxresults=5000&include=snapshots%2Cmetadata%2Ccopy HTTP/1.1
x-ms-version: 2017-04-17
x-ms-client-request-id: Azure-Storage-PowerShell-XXX
User-Agent: Azure-Storage/8.5.0 (.NET CLR 4.0.30319.42000; Win32NT 10.0.15063.0) AzurePowershell/v5.0.0
x-ms-date: Fri, 16 Mar 2018 08:32:56 GMT
Authorization: SharedKey XXX
Host: XXX.blob.core.windows.net
Run Code Online (Sandbox Code Playgroud)

powershell azure azure-storage azure-storage-blobs azure-powershell

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

将SSL证书添加到Windows Docker容器

如何在Docker容器中添加.cer -Certificate?由于容器没有要打开的接口,因此必须通过powershell完成mms.exe

.pfx -Certificates 的很好的教程。由于我有一个不带私钥的.cer文件,因此我必须对其稍加调整。无论何时调用,文档中 的powershell命令Import-Certificate -FilePath C:\myCertificateToAdd.cert -CertStoreLocation Cert:\CurrentUser\Root\都会卡住。

windows powershell ssl-certificate docker

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

如何批量添加成员到只有userprincipalname的组?

我有一个以下格式的csv文件

Userprincipalname
joe.blog@acme.com
winston.smart@acme.com
akshe.patel@acme.com
joseph.nkwame@acme
wonkyu.joon@acme.com
Run Code Online (Sandbox Code Playgroud)

但是在使用命令时Add-AzureADGroupMember,我只能通过objectid添加它们,用户对象id看起来像这样1c00937a-80f1-48d8-88be-fcd3cXXXXa8e

如何使用我的csv文件,将其转换为对象的ID,然后将这些ID添加到相关组?

我尝试了以下来获取对象ID

$varname = Import-Csv .\avo-fr-sec.csv | %{Get-AzureADUser -ObjectId $_.Userprincipalname} | SELECT ObjectId
Run Code Online (Sandbox Code Playgroud)

但我仍然坚持如何使用命令将它们添加到组中,该命令Add-AzureADGroupMember只能接受上面的对象ID.

干杯

powershell azure azure-active-directory

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

如何使用powershell将包含2个数字的字符串转换为货币?

我的文本文件包含由"+"符号分隔的2个数字.试图找出如何用货币等价替换它们.
示例字符串:

20 + 2将转换为0.20美元+ 0.02美元

1379 + 121将是> $ 13.79 + $ 1.21 USD

400 + 20将是4.00美元+ 0.20美元

等等.

我尝试使用几个角度,但它们不起作用或提供奇怪的结果.我试图通过尝试找到我认为会出现的所有模式来做到这一点.

.\Replace-FileString.ps1 "100+10" '$1.00+$0.10' $path1\*.txt -Overwrite
.\Replace-FileString.ps1 "1000+100" '$10.00+$1.00' $path1\*.txt -Overwrite
.\Replace-FileString.ps1 "300+30" '$3.00+$0.30' $path1\*.txt -Overwrite
.\Replace-FileString.ps1 "400+20" '$4.00+$0.20' $path1\*.txt -Overwrite
Run Code Online (Sandbox Code Playgroud)

或者这只是不起作用.

Select-String -Path .\*txt -Pattern '[0-9][0-9]?[0-9]?[0-9]?[0-9]?\+[0-9][0-9]?[0-9]?[0-9]?[0-9]?' | ForEach-Object  {$_ -replace ", ", $"}  {$_ -replace "+", "+$"}
Run Code Online (Sandbox Code Playgroud)

regex powershell replace

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