Questions tagged «powershell»

PowerShell是Microsoft的跨平台命令行和脚本实用程序。将此标签仅用于有关编写和执行PowerShell脚本的问题。跨平台版本PowerShell Core(Windows,macOS和Linux)特定的编程问题应标记为[powershell-core]。有关系统管理的问题应在“超级用户或服务器故障”时提出。

5
如何从选择字符串中获取捕获的组?
我正在尝试使用Powershell(版本4)从Windows上的一组文件中提取文本: PS > Select-String -AllMatches -Pattern <mypattern-with(capture)> -Path file.jsp | Format-Table 到现在为止还挺好。这给出了一组不错的MatchInfo对象: IgnoreCase LineNumber Line Filename Pattern Matches ---------- ---------- ---- -------- ------- ------- True 30 ... file.jsp ... {...} 接下来,我看到捕获在matchs成员中,因此我将它们取出: PS > Select-String -AllMatches -Pattern <mypattern-with(capture)> -Path file.jsp | ForEach-Object -MemberName Matches | Format-Table 这使: Groups Success Captures Index …

5
在PowerShell循环中获取当前项目的索引
给定PowerShell中的项目列表,如何在循环中找到当前项目的索引? 例如: $letters = { 'A', 'B', 'C' } $letters | % { # Can I easily get the index of $_ here? } 所有这些的目的是我想使用Format-Table输出一个集合,并添加一个带有当前项目索引的初始列。人们可以通过这种方式交互式地选择要选择的项目。
69 powershell 

4
PowerShell中的变量作用域
关于PowerShell的一件不幸的事是函数和脚本块是动态范围的。 但是让我惊讶的是,变量在内部作用域内表现为写时复制。 $array=@("g") function foo() { $array += "h" Write-Host $array } & { $array +="s" Write-Host $array } foo Write-Host $array 输出为: g s g h g 这使得动态范围界定的痛苦减轻了一些。但是,如何避免写时复制?
68 powershell  scope 


4
使用参数和凭据从PowerShell启动.ps1脚本,并使用变量获取输出
你好堆栈社区:) 我有一个简单的目标。我想从另一个Powershell脚本启动一些PowerShell脚本,但是有3个条件: 我必须传递凭据(执行连接到具有特定用户的数据库) 必须带一些参数 我想将输出传递给变量 有一个类似的问题Link。但是答案是使用文件作为2个PS脚本之间进行通信的方式。我只是想避免访问冲突。@Update:主脚本将启动其他几个脚本。因此,如果将同时从多个用户执行文件,则文件解决方案可能会很棘手。 Script1.ps1是应该将字符串作为输出的脚本。(请注意,这是一个虚构的脚本,真实的脚本有150行,所以我只想举一个例子) param( [String]$DeviceName ) #Some code that needs special credentials $a = "Device is: " + $DeviceName $a ExecuteScripts.ps1应该使用上述3个条件调用该条件 我尝试了多种解决方案。这个例子: $arguments = "C:\..\script1.ps1" + " -ClientName" + $DeviceName $output = Start-Process powershell -ArgumentList $arguments -Credential $credentials $output 我没有得到任何输出,我不能只是用 &C:\..\script1.ps1 -ClientName PCPC 因为我无法将-Credential参数传递给它。 先感谢您!

1
在Powershell中运行时与Visual Studio中运行时的HttpClient并发行为不同
我正在使用MS Graph API将数百万用户从本地AD迁移到Azure AD B2C,以在B2C中创建用户。我已经编写了一个.Net Core 3.1控制台应用程序来执行此迁移。为了加快进度,我正在同时调用Graph API。这很好-有点。 在开发过程中,从Visual Studio 2019运行时,我的性能达到了可接受的水平,但是为了测试,我从Powershell 7中的命令行运行。从Powershell中,对HttpClient的并发调用的性能非常糟糕。从Powershell运行时,HttpClient允许的并发调用数似乎是有限制的,因此,并发批处理中的调用(大于40至50个请求)将开始堆积。它似乎正在运行40至50个并发请求,同时阻止其余请求。 我不是在寻求异步编程方面的帮助。我正在寻找一种方法来解决Visual Studio运行时行为和Powershell命令行运行时行为之间的差异。从Visual Studio的绿色箭头按钮在发布模式下运行的行为符合预期。不从命令行运行。 我用异步调用填充任务列表,然后等待Task.WhenAll(tasks)。每次通话需要300到400毫秒。从Visual Studio运行时,它可以按预期工作。我并发执行1000个调用的批处理,每个处理都在预期的时间内完成。整个任务块比最长的单个调用花费几毫秒的时间。 当我从Powershell命令行运行相同的构建时,行为会改变。最初的40到50个通话会花费300到400毫秒,但是每个单独的通话时间会增加到20秒。我认为这些调用正在序列化,因此在其他等待时一次只执行40到50。 经过数小时的反复试验,我能够将其范围缩小到HttpClient。为了找出问题,我使用执行Task.Delay(300)并返回模拟结果的方法模拟了对HttpClient.SendAsync的调用。在这种情况下,从控制台运行的行为与从Visual Studio运行的行为相同。 我正在使用IHttpClientFactory,甚至尝试调整ServicePointManager的连接限制。 这是我的注册码。 public static IServiceCollection RegisterHttpClient(this IServiceCollection services, int batchSize) { ServicePointManager.DefaultConnectionLimit = batchSize; ServicePointManager.MaxServicePoints = batchSize; ServicePointManager.SetTcpKeepAlive(true, 1000, 5000); services.AddHttpClient(MSGraphRequestManager.HttpClientName, c => { c.Timeout = TimeSpan.FromSeconds(360); c.DefaultRequestHeaders.Add("User-Agent", "xxxxxxxxxxxx"); }) …

1
无法加载tsc.ps1,因为此系统上禁用了运行脚本
在PowerShell上,执行时收到错误消息tsc。这从来没有发生过。 我不确定是否应该混合使用PowerShell安全设置来纠正这种情况,例如基于此设置:PowerShell说“在此系统上禁用了脚本执行”。 更新资料 这是npm打算使用ps1脚本的新功能。他们的回购中提出了一个问题:https : //github.com/npm/cli/issues/470
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.