相关疑难解决方法(0)

如何在PowerShell中检查字符串是空还是空?

IsNullOrEmpty在PowerShell中是否有内置函数来检查字符串是空还是空?

到目前为止我找不到它,如果有内置方式,我不想为此编写函数.

.net string powershell null

375
推荐指数
9
解决办法
46万
查看次数

当绑定到参数时,如何防止字符串参数从null更改为空?

请考虑以下代码:

function f {
    param (
        [AllowNull()]
        [string]
        $x
    )
    return $x
}

$r = f -x $null
Run Code Online (Sandbox Code Playgroud)

$null到达[string]::Empty时转换为return. $null是不同的[string]::Empty,我想保留这种区别.我也更喜欢保持$x类型,[string]因为$x只有字符串的含义,接口在别处使用.

  1. 我怎样才能让$x出来作为$null当它传递$null
  2. 还有其他方法我可以告诉它不是从里面$x传递的吗?$null [string]::Emptyf

更新1

我想要做的是为其他类型.以下是相同的概念[int]:

function f { 
    param( 
        [System.Nullable[int]]$x 
    )
    return $x 
}

$r = f -x $null
Run Code Online (Sandbox Code Playgroud)

在那种情况下$r确实如此$null. $x可以是$null[int],但没有别的.对我来说似乎很奇怪,我必须允许任何物体,所以我可以通过一个 …

string parameters powershell null

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

调用 C# 代码时,PowerShell $null 不再为 null

在 PowerShell 中,可以定义 C# 代码并执行它。将 $null 传递到以下最简单的函数中表明 not null 被传递到函数中

Add-Type -TypeDefinition @"
public static class foo
{
public static void fooo(string a)
{
    if(a!=null)
    {
        System.Console.WriteLine("Not Null. Is '" + a + "'");
    }
}
}
"@ -Language CSharp
Run Code Online (Sandbox Code Playgroud)

按如下方式调用它会导致输出 Not Null。是 ''。这表明 $null 在 C# 中不为空。'IsNullOrEmpty' 或 'IsNullOrWhiteSpace' 之类的方法返回 true,因此 PowerShell 必须隐式地将 $null 转换为字符串。

[foo]::fooo($Null)
Run Code Online (Sandbox Code Playgroud)

除了在 C# 中调用 String.IsNullOrEnpty 之外,是否有更好的解决方法?注意:这与指定的“Add_Type”的 C# 语言无关。我正在使用 PowerShell V5。

string powershell null parameter-passing powershell-5.0

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

如何在Windows 8.1 Update 2操作系统中使用PowerShell环境中的Win32 API FindWindow()查找桌面窗口(按窗口名称)?

我不记得在旧的Windows操作系统中找到一个窗口有任何问题,但是,我使用PowerShell v4.0在Windows 8.1 Update 2操作系统中没有成功.

这是我正在使用的PowerShell v4.0代码(非常简单):

$sig=@'
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(String sClassName, String sAppName);
'@

$fw = Add-Type -Namespace Win32 -Name Funcs -MemberDefinition $sig -PassThru
$wname='Form1' # any existing window name

$fw::FindWindow($null -as [String], $wname) # returns 0, always!
Run Code Online (Sandbox Code Playgroud)

最后一个命令总是返回0.

将DllImport属性更改为

[DllImport("user32.dll", CharSet = CharSet.Unicode)]
Run Code Online (Sandbox Code Playgroud)

什么都不改变; 0以相同的方式返回.

有趣的是注意到C#中的等效代码,返回正确的HWND值.

有谁知道上面的PowerShell v4.0代码有什么问题(以及如何修复)?

windows powershell

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