小编tom*_*ulk的帖子

Get-ADUser中带变量的通配符

我确定这只是一个语法错误,但我试图搜索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)

只是不回报任何东西.我确定它是带有"*"的语法.但不知道为什么.谢谢你的帮助.

powershell

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

使用.GetValueNames()方法的空引用异常

我试图在一台机器上获取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)

.net c# registry

3
推荐指数
1
解决办法
1070
查看次数

我应该使用[ValidateNotNullOrEmpty()]然后在函数中查找空格,还是使用[ValidateScript(...)]?

因为在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属性.

powershell

3
推荐指数
1
解决办法
1378
查看次数

设置 $PSDefaultParametersValues 以在模块范围内使用

我想我只是遗漏了一些东西,但这是我的设置,我有一个包含三个测试功能的测试模块,我想设置 $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)

powershell scope module default-value

3
推荐指数
1
解决办法
1385
查看次数

C# 二进制 PowerShell 模块中的 ValidateScript ParameterAttribute

我最近开始在 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

c# binary powershell powershell-module

2
推荐指数
1
解决办法
1119
查看次数

使用c#获取曾经登录过电脑的所有用户

我试图检索所有曾经登录过电脑的用户并将它们填充到组合框中,但搜索后,我没有找到任何好的答案。

我本来打算看看:

DirectoryInfo(Environment.GetEnvironmentVariable("USERPROFILE")).Parent.GetDirectories();
Run Code Online (Sandbox Code Playgroud)

但我觉得这样太不靠谱了。

接下来我打算查看注册表,但读完后,如果用户帐户名发生更改,该列表将不会更新。我知道机器上必须有所有用户配置文件的记录,因为我使用了 Microsoft systernals 工具来管理它们。但我只是不知道如何用 C# 以编程方式完成它。

c# user-profile

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