小编Mar*_*ndl的帖子

PowerShell 中的命名参数显示为“位置”

我有一个简单的函数,有两个参数。我没有提到它们是位置性的,但当我检查该函数的帮助时,它会自动为它们分配一个位置。如何强制它们仅被命名为参数(不接受按位置的值)?

Function Test-Params
{
    Param
    (
        [Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
        $Param1,

        [Parameter(ValueFromPipeline,ValueFromPipelineByPropertyName)]
        $Param2
    )

    Write-Host "$Param1 $Param2"
}
Run Code Online (Sandbox Code Playgroud)

当我检查此函数的帮助或尝试通过提供参数位置值来运行该函数时,它可以工作(但它不应该工作):

Test-Params test1 test2
test1 test2
Run Code Online (Sandbox Code Playgroud)

帮助输出:

help Test-Params -Full

NAME
    Test-Params

SYNTAX
    Test-Params [-Param1] <Object> [[-Param2] <Object>]  [<CommonParameters>]


PARAMETERS
    -Param1 <Object>

        Required?                    true
        Position?                    0
        Accept pipeline input?       true (ByValue, ByPropertyName)
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false

    -Param2 <Object>

        Required?                    false
        Position?                    1
        Accept pipeline input?       true (ByValue, ByPropertyName)
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
Run Code Online (Sandbox Code Playgroud)

powershell parameter-passing

5
推荐指数
1
解决办法
731
查看次数

如何从目录中获取所有PowerShell脚本

无法从目录尝试点源所有PowerShell脚本:

. .\*.ps1
Run Code Online (Sandbox Code Playgroud)

返回此:

>  : The term '.\*.ps1' is not recognized as the name of a cmdlet,
> function, script file, or operable program. Check the spelling of the
> name, or if a path was included, verify that the path is correct and
> try again. At line:1 char:3
> + . .\*.ps1
> +   ~~~~~~~
>     + CategoryInfo          : ObjectNotFound: (.\*.ps1:String) [], CommandNotFoundException
>     + FullyQualifiedErrorId : CommandNotFoundException
Run Code Online (Sandbox Code Playgroud)

powershell

5
推荐指数
1
解决办法
2419
查看次数

重命名匹配模式的文件名部分

假设我有一个这样的文件名列表:

some-file.ts  
my-project-service.ts  
other.ts  
something-my-project.ts 
Run Code Online (Sandbox Code Playgroud)

我需要更改其中包含的文件名,my-project以便将该部分重命名为$appname$.

所以my-project-service.ts会变成$appname$-service.ts

我需要从根目录递归地执行此操作。

我似乎对 PowerShell 毫无希望,所以我想我会在这里问,看看是否有人可以帮助我。

powershell powershell-2.0

5
推荐指数
1
解决办法
2357
查看次数

缺少 Microsoft Graph ServicePrincipal

TL;TR 我们正在使用 Microsoft Graph API 创建 AAD 应用程序。该应用程序有一些requiredResourceAccess条目,其中需要访问 microsoft graph。创建应用程序后,我们希望使用appRoleAssignments对象将角色分配给服务主体。该对象需要resourceId,它是我尝试确定的 objectId(例如 Microsoft 图形的)。

我们正在使用 Graph API 本身来获取服务主体:https://graph.windows.net/<tenant>/servicePrincipals?api-version=1.6但不知何故缺少Microsoft Graph

Windows Azure Active Directory      
Microsoft App Access Panel          
Azure Classic Portal                
Microsoft.SMIT                      
Office 365 Configure                
Windows Azure Service Management API
Microsoft.SupportTicketSubmission   
Azure ESTS Service                  
Signup                              
Microsoft password reset service  
Run Code Online (Sandbox Code Playgroud)

我需要确定的ObjectId中的微软图形服务主体。从新的 AAD 开始,似乎没有 Microsoft Graph Principal:

Get-MsolServicePrincipal -AppPrincipalId 00000003-0000-0000-c000-000000000000
Run Code Online (Sandbox Code Playgroud)

输出

Get-MsolServicePrincipal : Service principal was not found.
Run Code Online (Sandbox Code Playgroud)

如何确定 …

powershell azure azure-active-directory azure-ad-graph-api

5
推荐指数
1
解决办法
1894
查看次数

变量中的PowerShell变量

我正在尝试添加一个$numberOfNics基于数字添加nics 的变量.现在这是我的代码,我对如何将它放入循环感到困惑.我知道一个数组可能是要走的路,但不太确定如何在这个意义上创建一个只调用变量而不是设置它们的数组.

旧代码:

$numberOfNics=1

$networkname1 = "ondemandport1"
$networkname2 = "ondemandport2"
$networkname3 = "ondemandport3"
$networkname4 = "ondemandport4"
$networkname5 = "ondemandport5"
$networkname6 = "ondemandport6"
$networkname7 = "ondemandport7"
$networkname8 = "ondemandport8"
$networkname9 = "ondemandport9"

$networkInterface1 = New-AzureRmNetworkInterface -Name $networkname1

$networkInterface2 = New-AzureRmNetworkInterface -Name $networkname2 

$networkInterface3 = New-AzureRmNetworkInterface -Name $networkname3 

$networkInterface4 = New-AzureRmNetworkInterface -Name $networkname4 

$networkInterface5 = New-AzureRmNetworkInterface -Name $networkname5
Run Code Online (Sandbox Code Playgroud)

为了整理这个,我想做一个像这样的循环

for ($i = 0; $i -lt $numberOfNics; $i++)
{
    $networkInterface$i = New-AzureRmNetworkInterface -Name $networkname$i
}
Run Code Online (Sandbox Code Playgroud)

编辑:谢谢马丁,但现在我无法调用变量.

$networkInterfaces = 1 .. $numberOfNics …
Run Code Online (Sandbox Code Playgroud)

powershell azure

5
推荐指数
1
解决办法
134
查看次数

如何从 .Net/C# 或 PowerShell 以编程方式调用或执行 azure cli 命令?

我正在尝试从 .NET/C# 或 PowerShell 以编程方式执行 azure CLI 命令。但我找不到任何方法来运行这个。有人可以阐明这一点吗?

.net powershell azure azure-cli

5
推荐指数
1
解决办法
8253
查看次数

Azure Devops 管道 Yaml“切换块注释”不起作用

在 Azure DevOps 管道 YAML 编辑器中,这些选项不执行任何操作。如果右键单击编辑器并选择“命令调色板”或按 F1,则可以使用此菜单。

在此输入图像描述

azure azure-devops azure-pipelines-yaml

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

在 New-WebServiceProxy 中包含德语变音的 PSCredential

我尝试PSCredential使用包含德语变音符号的密码创建一个对象,并将其传递给New-WebServiceProxycmdlet。只要密码不包含以下示例中的任何变音符号,代码就会按预期工作:

$secp = ConvertTo-SecureString 'abÜ312!' -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential('\user@db', $secp)
$proxy = New-WebServiceProxy -Uri "https://example.com/webservice/myWs?wsdl" -Credential $mycreds
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我收到以下错误消息:

New-WebServiceProxy :请求失败,HTTP 状态为 401:未经授权。

当我使用例如 Fiddler 捕获流量时,我看到New-WebServiceProxycmdlet 将凭据添加为具有base64编码的基本授权

GET https://example.com/webservice/myWs?wsdl HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.42000)
Authorization: Basic dXNlckBkYjphYtwzMTIh
Host: example.com
Run Code Online (Sandbox Code Playgroud)

这是解码后的 Base64 字符串在 Utf8 中的样子:

UTF8 中的字符串

所以看起来 PowerShell 正在将元音符号编码为ANSI字符串。当我手动对凭据(dXNlckBkYjphYsOcMzEyIQ==而不是dXNlckBkYjphYtwzMTIh)进行 base64 编码并回复提琴手请求时,我得到了所需的响应。

不幸的是,我无法使用此解决方法,因为New-WebServiceProxy它不允许我自己添加 Authorization 标头。 …

powershell encoding

5
推荐指数
1
解决办法
73
查看次数

如何从文本文件中提取子字符串?

我有以下文本文件

testA=foo
testB=foobar
testC=Whatever
Run Code Online (Sandbox Code Playgroud)

现在我想提取的值testBfoobar.使用我当前的PowerShell命令,我只能收到整行:

testB=foobar
Run Code Online (Sandbox Code Playgroud)

我的命令是:

Select-String -Path .\test.txt -Pattern "testB=" -List
Run Code Online (Sandbox Code Playgroud)

我可以看到字符串有替换函数,所以你可以testB=用空字符串替换,但我不知道如何实现这一点.

powershell

4
推荐指数
1
解决办法
5399
查看次数

将字符串附加到数组的每个项目

我有一个数组,当我尝试向其添加字符串时,该数组将转换为单个字符串。

我在数组中有以下数据:

$Str  
451 CAR,-3 ,7 ,10 ,0 ,3 , 20 ,Over: 41  
452 DEN «,40.5,0,7,0,14, 21 ,  Cover: 4  
Run Code Online (Sandbox Code Playgroud)

我想在这种情况下像这样添加游戏的一周:

$Str = "Week"+$Week+$Str 
Run Code Online (Sandbox Code Playgroud)

我得到一个字符串:

Week16101,NYG,42.5 ,3 ,10 ,3 ,3 , 19 ,Over 43 102,PHI,-  1,14,7,0,3, 24 ,  Cover 4 103,
Run Code Online (Sandbox Code Playgroud)

当然,我希望追加发生在每一行上。

arrays powershell append

4
推荐指数
3
解决办法
9755
查看次数