我在将字符串变量转换为字节时遇到了一些困难。
工作代码:
$fqtm = New-Object -ComObject Fsrm.FsrmQuotaManager
$quota = $fqtm.GetQuota('E:\HOME\folder')
$quota.QuotaLimit = 15GB
$quota.Commit()
无效代码:
$Limit = '15GB'
$fqtm = New-Object -ComObject Fsrm.FsrmQuotaManager
$quota = $fqtm.GetQuota('E:\HOME\folder')
$quota.QuotaLimit = $Limit
$quota.Commit()
问题是值15GB
用作字符串而不是INT64
。所以我没有运气就尝试了以下内容:
$quota.QuotaLimit = ($Limit -as [Int64])
$quota.QuotaLimit = [Int64]$Limit
有没有办法克服这个转换问题?
$Limit
变量来自哪里:
# GroupName example: 'WORLD EU Home Drives 5GB'
# GroupName example: 'WORLD EU Home Drives 15GB'
$Users = Get-ADGroup -SearchBase 'OU=EU,OU=world,DC=domain,DC=net' -Filter "Name -like '$GroupName*' " | % {
$Limit = $_.Name.Split(' ')[-1]
Get-ADGroupMember $_ -Recursive | Get-ADUser -Properties HomeDirectory | where {$_.Enabled -and $_.HomeDirectory} | % {
Write-Verbose "User '$($_.Name)' - Limit '$Limit' - HomeDrive '$($_.HomeDirectory)'"
[PSCustomObject]@{
User = $_.Name
Limit = $Limit
HomeDirectory = $_.HomeDirectory
}
}
}
答案 0 :(得分:3)
好吧,你已将'15GB'
放在引号中,这意味着你想要一个字符串。只需删除引号,PS就会将其转换为int值:
$Limit = 15GB
P.S。我刚检查过,它在我的电脑上生成Int64
:
PS C:\Users\xxx> Get-Host
Name : ConsoleHost
Version : 4.0
InstanceId : 1d32179c-6b30-4ff8-9b9d-9321fb71cb59
UI : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture : ru-RU
CurrentUICulture : en-US
PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace : System.Management.Automation.Runspaces.LocalRunspace
PS C:\Users\xxx> $Limit = 15GB
PS C:\Users\xxx> $Limit.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int64 System.ValueType
PS C:\Users\xxx> $Limit
16106127360
我已将OP更新为更清晰。所以你可以看到数据的位置
来自
好的,我现在看到了你的问题。试试这个黑客:
$quota.QuotaLimit = [scriptblock]::Create($Limit).InvokeReturnAsIs()
它对我有用:
PS C:\Users\xxx> $Limit = '15GB'
PS C:\Users\xxx> [scriptblock]::Create($Limit).InvokeReturnAsIs()
16106127360
然而,如果它能够被保存在适当的位置,那将是很好的
代码开头的格式$Limit = $_.Name.Split(' ')[-1]
试试这个:
$Limit = [scriptblock]::Create(($_.Name.Split(' ')[-1])).InvokeReturnAsIs()