我确定这只是一个语法错误,但我试图搜索AD用户,我无法弄清楚为什么这不起作用:
Write-Host "Enter LastName or UserName:"
$x = Read-Host
Get-ADUser -Filter { SAMAccountName -like '*$x*' } -Properties DispalyName | FT -Properties DisplayName
Run Code Online (Sandbox Code Playgroud)
只是不回报任何东西.我确定它是带有"*"的语法.但不知道为什么.谢谢你的帮助.
我试图在一台机器上获取SQL的所有实例名称,所有值都保存在一个regkey这里是我的代码,但我一直得到一个空引用异常.
private void RegLoop()
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL")
foreach (var v in key.GetValueNames())
{
MessageBox.Show("{0}", v);
}
}
Run Code Online (Sandbox Code Playgroud) 因为在PowerShell中没有
[ValidateNotNullOrWhiteSpace()]
Run Code Online (Sandbox Code Playgroud)
参数属性,使用起来更好
[ValidateNotNullOrEmpty()]
Run Code Online (Sandbox Code Playgroud)
作为参数属性,然后查找函数内的空格,或者我应该使用
[ValidateScript({ -not ([String]::IsNullOrWhiteSpace($_)) })]
Run Code Online (Sandbox Code Playgroud)
作为参数属性.
我不确定NotNullOrEmpty属性真正适用于什么,因为99%的时间,我不希望这个工作:
My-Cmdlet -ParameterName " "
Run Code Online (Sandbox Code Playgroud)
但因为""仍然是一个字符串,它将传递NotNullOrEmpty属性.
我想我只是遗漏了一些东西,但这是我的设置,我有一个包含三个测试功能的测试模块,我想设置 $PSDefaultParameterValues 以创建一个仅存在于所述模块中的其他 cmdlet 的通用参数值。这是我的代码:
测试.psm1:
$PSDefaultParameterValues.Clear()
"$(Split-Path -Path $MyInvocation.MyCommand.Path)\*.ps1" | Resolve-Path | % { . $_.ProviderPath }
Run Code Online (Sandbox Code Playgroud)
在同一个目录中,我有我的功能:
新的TestFunction.ps1:
Function New-TestFunction
{
[CmdletBinding()]
[OutputType([String])]
Param
(
[String]
$InputString
)
$Script:PSDefaultParameterValues.Add("Write-TestValue:OutputValue", $InputString)
}
Run Code Online (Sandbox Code Playgroud)
写测试值.ps1:
Function Write-TestValue
{
[CmdletBinding()]
[OutputType()]
Param
(
[Parameter()]
[String]
$OutputValue
)
Write-Output -InputObject $OutputValue
}
Run Code Online (Sandbox Code Playgroud)
所以,我应该能够做到这一点:
PS C:\> New-TestFunction -InputString 'Test String'; Write-TestValue
PS C:\> 'Test String'
Run Code Online (Sandbox Code Playgroud)
但它什么都不返回,$OutputValue 仍然是 $null。我让它工作的唯一方法是使用 $Global: 范围,我宁愿不这样做。我觉得在 Module 范围下导入的函数应该看到 $Script: Scope of variables。我写了一个小测试函数:
写脚本PSDefaultParameterValues.ps1
Function Write-ScriptPSDefaultParameterValues
{
[CmdletBinding()]
[OutputType()]
Param
( …Run Code Online (Sandbox Code Playgroud) 我最近开始在 C# 中尝试二进制 PowerShell 编程,但我在 ParameterValidationAttributes(主要是 ValidateScript 属性)方面遇到了一些问题。基本上,我想创建一个名为“ComputerName”的参数并验证当时计算机是否在线。在 PowerShell 中很容易:
[Parameter(ValueFromPipeLine = $true)]
[ValidateScript({ if (Test-Connection -ComputerName $_ -Quiet -Count 1) { $true } else { throw "Unable to connect to $_." }})]
[String]
$ComputerName = $env:COMPUTERNAME,
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在 C# 中复制它。ValidateScript 属性采用 ScriptBlock 对象http://msdn.microsoft.com/en-us/library/system.management.automation.scriptblock(v=vs.85).aspx我只是不确定如何在 C# 中创建它,我真的找不到任何例子。
[Parameter(ValueFromPipeline = true)]
[ValidateScript(//Code Here//)]
public string ComputerName { get; set; }
Run Code Online (Sandbox Code Playgroud)
C# 对我来说很陌生,所以如果这是一个愚蠢的问题,我深表歉意。这是 ValidateScript 属性类的链接:http : //msdn.microsoft.com/en-us/library/system.management.automation.validatescriptattribute(v=vs.85).aspx
我试图检索所有曾经登录过电脑的用户并将它们填充到组合框中,但搜索后,我没有找到任何好的答案。
我本来打算看看:
DirectoryInfo(Environment.GetEnvironmentVariable("USERPROFILE")).Parent.GetDirectories();
Run Code Online (Sandbox Code Playgroud)
但我觉得这样太不靠谱了。
接下来我打算查看注册表,但读完后,如果用户帐户名发生更改,该列表将不会更新。我知道机器上必须有所有用户配置文件的记录,因为我使用了 Microsoft systernals 工具来管理它们。但我只是不知道如何用 C# 以编程方式完成它。