我认为无论平台如何,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中预期的吗?
我正在使用Powershell并尝试使用remove-item。通常,在我的场景中该文件将不存在,并且会生成一个错误,并在我的输出中出现6行红色文本。那是非常破坏性的,在这种情况下,我不想看到任何东西。但是,如果还有其他错误,例如由于正在使用而无法删除文件,那么我想看看该错误。我以为我可以使用两个catch语句:一个带有[filenotfoundexception]或类似的东西,另一个带有没有异常类型的东西来获取其他所有内容。但是,错误文本中的任何代码都不能用作异常类型:“无法找到类型”。解决这个问题的正确方法是什么?
我有一个具有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[]然后重试
我应该改变些什么来实现这一目标?
有人可以向我解释为什么下面没有按预期工作?在下面的例子中,我希望$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脚本中使用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时,我以为我曾经在某个地方看到过它们,但现在还没有任何线索.
我试图反转队列并使其成为堆栈.但它没有显示任何输出.
$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)
这有什么不对?怎么纠正呢?
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
我有一个以下格式的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.
干杯
我的文本文件包含由"+"符号分隔的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)