标签: powershell

Powershell可以并行运行命令吗?

我有一个powershell脚本对一堆图像进行一些批处理,我想做一些并行处理.Powershell似乎有一些后台处理选项,如启动作业,等待作业等,但我找到的并行工作的唯一好资源是编写脚本文本并运行它们(PowerShell多线程)

理想情况下,我喜欢类似于.net 4中的并行foreach的东西.

有点像:

foreach-parallel -threads 4 ($file in (Get-ChildItem $dir))
{
   .. Do Work
}
Run Code Online (Sandbox Code Playgroud)

也许我会更好的只是下降到c#...

parallel-processing powershell multithreading

115
推荐指数
8
解决办法
19万
查看次数

在PowerShell中选择阵列的所有对象上的一个属性的值

假设我们有一个对象数组$ 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数组.

有没有更好的办法?

arrays powershell member-enumeration

115
推荐指数
3
解决办法
21万
查看次数

用于查找和替换具有特定扩展名的所有文件的PowerShell脚本

我在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 scripting replace find

113
推荐指数
8
解决办法
13万
查看次数

如何获取用户所属的所有组?

PowerShell的Get-ADGroupMembercmdlet返回特定组的成员.是否有cmdlet或属性来获取特定用户所属的所有组?


我修正了我的错误:Get-Member应该是Get-ADGroupMember.

powershell active-directory powershell-2.0

113
推荐指数
10
解决办法
84万
查看次数

Powershell v3 Invoke-WebRequest HTTPS错误

使用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)

有人可以提供一些指导,说明这里可能出现的问题以及解决方法吗?

谢谢

.net rest powershell https

113
推荐指数
7
解决办法
18万
查看次数

为什么在Foreach-Object中继续表现得像break?

如果我在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 foreach

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

PowerShell中的多行注释

我们可以在PowerShell中一起评论多行吗?

我试着看,但我没有找到任何答案.如果脚本太长,手动评论每一行是非常恼人的.

powershell powershell-2.0

111
推荐指数
2
解决办法
5万
查看次数

如何在不显示窗口的情况下运行PowerShell脚本?

如何在不向用户显示窗口或任何其他标志的情况下运行PowerShell脚本?

换句话说,脚本应该在后台安静地运行而不向用户发出任何信号.

对于不使用第三方组件的答案的额外信用:)

windows powershell scripting batch-file silent

110
推荐指数
13
解决办法
31万
查看次数

如何列出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)

我怎样才能看到所有房产?

powershell

110
推荐指数
4
解决办法
22万
查看次数

使用Invoke-WebRequest和用户名和密码在GitHub API上进行基本身份验证

初步问题

使用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 basic-authentication github-api

108
推荐指数
7
解决办法
17万
查看次数