我有一个powershell脚本对一堆图像进行一些批处理,我想做一些并行处理.Powershell似乎有一些后台处理选项,如启动作业,等待作业等,但我找到的并行工作的唯一好资源是编写脚本文本并运行它们(PowerShell多线程)
理想情况下,我喜欢类似于.net 4中的并行foreach的东西.
有点像:
foreach-parallel -threads 4 ($file in (Get-ChildItem $dir))
{
.. Do Work
}
Run Code Online (Sandbox Code Playgroud)
也许我会更好的只是下降到c#...
假设我们有一个对象数组$ objects.假设这些对象具有"名称"属性.
这就是我想要做的
$results = @()
$objects | %{ $results += $_.Name }
Run Code Online (Sandbox Code Playgroud)
这有效,但可以更好的方式完成吗?
如果我这样做:
$results = objects | select Name
Run Code Online (Sandbox Code Playgroud)
$results是具有Name属性的对象数组.我希望$ results包含一个Name数组.
有没有更好的办法?
我在Windows Server 2008上嵌套了几个配置文件,如下所示:
C:\Projects\Project_1\project1.config
C:\Projects\Project_2\project2.config
Run Code Online (Sandbox Code Playgroud)
在我的配置中,我需要像这样进行字符串替换:
<add key="Environment" value="Dev"/>
Run Code Online (Sandbox Code Playgroud)
会变成:
<add key="Environment" value="Demo"/>
Run Code Online (Sandbox Code Playgroud)
我考虑过使用批处理脚本,但没有好的方法可以做到这一点,我听说使用PowerShell脚本可以轻松执行此操作.我找到了find/replace的例子,但我希望有一种方法可以遍历我的C:\ Projects目录中的所有文件夹,并找到任何以'.config'扩展名结尾的文件.当它找到一个,我希望它替换我的字符串值.
有什么好的资源可以找到如何做到这一点或任何可以提供一些见解的PowerShell大师?
PowerShell的Get-ADGroupMembercmdlet返回特定组的成员.是否有cmdlet或属性来获取特定用户所属的所有组?
我修正了我的错误:Get-Member应该是Get-ADGroupMember.
使用Powershell v3的Invoke-WebRequest和Invoke-RestMethod我已成功使用POST方法将json文件发布到https网站.
我正在使用的命令是
$cert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("cert.crt")
Invoke-WebRequest -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert -Body $json -ContentType application/json -Method POST
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用GET方法时:
Invoke-WebRequest -Uri https://IPADDRESS/resource -Credential $cred -certificate $cert -Method GET
Run Code Online (Sandbox Code Playgroud)
返回以下错误
Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send.
At line:8 char:11
+ $output = Invoke-RestMethod -Uri https://IPADDRESS/resource -Credential $cred
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用以下代码来忽略SSL证书,但我不确定它是否真的在做任何事情.
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Run Code Online (Sandbox Code Playgroud)
有人可以提供一些指导,说明这里可能出现的问题以及解决方法吗?
谢谢
如果我在powershell脚本中执行以下操作:
$range = 1..100
ForEach ($_ in $range) {
if ($_ % 7 -ne 0 ) { continue; }
Write-Host "$($_) is a multiple of 7"
}
Run Code Online (Sandbox Code Playgroud)
我得到了预期的输出:
7 is a multiple of 7
14 is a multiple of 7
21 is a multiple of 7
28 is a multiple of 7
35 is a multiple of 7
42 is a multiple of 7
49 is a multiple of 7
56 is a multiple of 7
63 is a multiple …Run Code Online (Sandbox Code Playgroud) 我们可以在PowerShell中一起评论多行吗?
我试着看,但我没有找到任何答案.如果脚本太长,手动评论每一行是非常恼人的.
当我看Win32_ComputerSystem类,它表明类似性质的负荷Status,PowerManagementCapabilities等等.然而,当在PowerShell中我做了以下我只拿回一对夫妇:
PS C:\Windows\System32\drivers> Get-WmiObject -Class "Win32_computersystem"
Domain : YYY.com
Manufacturer : VMware, Inc.
Model : VMware Virtual Platform
Name : LONINEGFQEF58
PrimaryOwnerName : Authorised User
TotalPhysicalMemory : 2147016704
Run Code Online (Sandbox Code Playgroud)
我怎样才能看到所有房产?
使用cURL,我们可以使用HTTP Web请求传递用户名,如下所示:
$ curl -u <your_username> https://api.github.com/user
Run Code Online (Sandbox Code Playgroud)
该-u标志接受用于身份验证的用户名,然后cURL将请求密码.cURL示例用于使用GitHub Api进行基本身份验证.
我们如何同样传递用户名和密码以及Invoke-WebRequest?最终目标是在GitHub API中使用基本身份验证的PowerShell.
Notes来自客户端的Wikipedia on Basic Auth.
将用户名和密码合并为一个字符串 username:password
$user = "shaunluttin"
$pass = "super-strong-alpha-numeric-symbolic-long-password"
$pair = "${user}:${pass}"
Run Code Online (Sandbox Code Playgroud)
将字符串编码为Base64的RFC2045-MIME变体,但不限于76个字符/行.
$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
$base64 = [System.Convert]::ToBase64String($bytes)
Run Code Online (Sandbox Code Playgroud)
创建Auth值作为方法,空格,然后编码对 Method Base64String
$basicAuthValue = "Basic $base64"
Run Code Online (Sandbox Code Playgroud)
创建标题 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
$headers = @{ Authorization = $basicAuthValue }
Run Code Online (Sandbox Code Playgroud)
调用Web请求
Invoke-WebRequest -uri "https://api.github.com/user" -Headers $headers
Run Code Online (Sandbox Code Playgroud)
感谢@briantist的帮助!
PowerShell版本比cURL版本更冗长.这是为什么?@briantist指出GitHub打破了RFC并且PowerShell坚持使用它.这是否意味着cURL也打破了标准?
powershell ×10
scripting ×2
.net ×1
arrays ×1
batch-file ×1
find ×1
foreach ×1
github-api ×1
https ×1
replace ×1
rest ×1
silent ×1
windows ×1