我有一个简单的函数,有两个参数。我没有提到它们是位置性的,但当我检查该函数的帮助时,它会自动为它们分配一个位置。如何强制它们仅被命名为参数(不接受按位置的值)?
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脚本:
. .\*.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) 假设我有一个这样的文件名列表:
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 毫无希望,所以我想我会在这里问,看看是否有人可以帮助我。
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)
如何确定 …
我正在尝试添加一个$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) 我正在尝试从 .NET/C# 或 PowerShell 以编程方式执行 azure CLI 命令。但我找不到任何方法来运行这个。有人可以阐明这一点吗?
我尝试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 中的样子:
所以看起来 PowerShell 正在将元音符号编码为ANSI字符串。当我手动对凭据(dXNlckBkYjphYsOcMzEyIQ==而不是dXNlckBkYjphYtwzMTIh)进行 base64 编码并回复提琴手请求时,我得到了所需的响应。
不幸的是,我无法使用此解决方法,因为New-WebServiceProxy它不允许我自己添加 Authorization 标头。 …
我有以下文本文件
testA=foo
testB=foobar
testC=Whatever
Run Code Online (Sandbox Code Playgroud)
现在我想提取的值testB是foobar.使用我当前的PowerShell命令,我只能收到整行:
testB=foobar
Run Code Online (Sandbox Code Playgroud)
我的命令是:
Select-String -Path .\test.txt -Pattern "testB=" -List
Run Code Online (Sandbox Code Playgroud)
我可以看到字符串有替换函数,所以你可以testB=用空字符串替换,但我不知道如何实现这一点.
我有一个数组,当我尝试向其添加字符串时,该数组将转换为单个字符串。
我在数组中有以下数据:
$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)
当然,我希望追加发生在每一行上。