Powershell函数限制数据类型
尝试创建如下所示的函数:Powershell函数限制数据类型,powershell,smo,Powershell,Smo,尝试创建如下所示的函数: Function Get-SqlErrorLogPrevious24 { [CmdletBinding()] Param ( [Parameter(Mandatory=$True,Position=1)] [Microsoft.SqlServer.Management.Smo.Server]$Server ) ($Server.ReadErrorLog()).where{$_.logdate -ge ((
Function Get-SqlErrorLogPrevious24 {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$True,Position=1)]
[Microsoft.SqlServer.Management.Smo.Server]$Server
)
($Server.ReadErrorLog()).where{$_.logdate -ge ((Get-Date).AddHours(-24))}
}
不过我注意到,我可以只传入一个字符串,而不是一个服务器对象
Powershell中是否有一种方法可以强制执行传入的数据类型,或者它总是隐式地将字符串转换为SMO对象 否。PowerShell有几种“策略”,用于确保您在函数中收到的是正确的类型。如果它可以使用其中一个来将传递的值(在本例中为字符串)转换为所需的类型(SMO对象),那么它就会这样做 这是一个
您可以实现自定义转换属性,如果类型不同,该属性将引发异常:
Add-Type @'
using System;
using System.Management.Automation;
public class EnforceTypeAttribute : ArgumentTransformationAttribute {
private Type type;
public EnforceTypeAttribute(Type type) {
this.type=type;
}
public override object Transform(EngineIntrinsics engineIntrinsics, object inputData) {
if(type.IsInstanceOfType(inputData)) {
return inputData;
} else {
throw new Exception("Incorrect type.");
}
}
}
'@
function f {param([int]$i) $i}
function g {param([EnforceType([int])][int]$i) $i}
f 1 #OK
f '1' #OK
g 1 #OK
g '1' #Error