String 将字符串转换为字节
我在将字符串变量转换为字节时遇到了一些困难 工作代码:String 将字符串转换为字节,string,powershell,type-conversion,String,Powershell,Type Conversion,我在将字符串变量转换为字节时遇到了一些困难 工作代码: $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.Get
$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()
# 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
}
}
}
不工作代码:
$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()
# 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
}
}
}
问题是值15GB
用作字符串,而不是INT64
。因此,我尝试了以下方法,但运气不佳:
$quota.QuotaLimit = ($Limit -as [Int64])
$quota.QuotaLimit = [Int64]$Limit
有没有办法克服这个转换问题
变量$Limit
来自哪里:
$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()
# 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
}
}
}
好吧,你已经把你的
'15GB'
放在引号里了,这意味着你想要一个字符串。只需删除引号,PS就会将其转换为int值:
$Limit = 15GB
另外,我刚刚检查过,它在我的电脑上生成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=$\u.Name.Split(“”)[-1]
试试这个:
$Limit = [scriptblock]::Create(($_.Name.Split(' ')[-1])).InvokeReturnAsIs()
好吧,你已经把你的
'15GB'
放在引号里了,这意味着你想要一个字符串。只需删除引号,PS就会将其转换为int值:
$Limit = 15GB
另外,我刚刚检查过,它在我的电脑上生成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=$\u.Name.Split(“”)[-1]
试试这个:
$Limit = [scriptblock]::Create(($_.Name.Split(' ')[-1])).InvokeReturnAsIs()
好吧,你已经把你的
'15GB'
放在引号里了,这意味着你想要一个字符串。只需删除引号,PS就会将其转换为int值:
$Limit = 15GB
另外,我刚刚检查过,它在我的电脑上生成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=$\u.Name.Split(“”)[-1]
试试这个:
$Limit = [scriptblock]::Create(($_.Name.Split(' ')[-1])).InvokeReturnAsIs()
好吧,你已经把你的
'15GB'
放在引号里了,这意味着你想要一个字符串。只需删除引号,PS就会将其转换为int值:
$Limit = 15GB
另外,我刚刚检查过,它在我的电脑上生成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=$\u.Name.Split(“”)[-1]
试试这个:
$Limit = [scriptblock]::Create(($_.Name.Split(' ')[-1])).InvokeReturnAsIs()
是的,这是一个有效的解决方法。但我确实需要能够将其转换为bytes/INT64。我无法更改源数据。@DarkLite1
[int64]$Limit=15GB
那么?我确实需要一种方法将[String]$Limit='15GB'
转换为16106127360
。按照您的建议更改输入对我来说不是一个选项。@DarkLite1,这样您就可以更改$quota.QuotaLimit=$Limit
行,但不能更改$Limit='15GB'
行?它从哪里来的?我已经更新了OP以便更清楚。因此,您可以看到数据来自何处。是的,这是一个有效的解决方法。但我确实需要能够将其转换为bytes/INT64。我无法更改源数据。@DarkLite1[int64]$Limit=15GB
那么?我确实需要一种方法将[String]$Limit='15GB'
转换为16106127360
。按照您的建议更改输入对我来说不是一个选项。@DarkLite1,这样您就可以更改$quota.QuotaLimit=$Limit
行,但不能更改$Limit='15GB'
行?它从哪里来的?我已经更新了OP以便更清楚。因此,您可以看到数据来自何处。是的,这是一个有效的解决方法。但我确实需要能够将其转换为bytes/INT64。我无法更改源数据。@DarkLite1[int64]$Limit=15GB
那么?我确实需要一种方法将[String]$Limit='15GB'
转换为16106127360
。按照您的建议更改输入对我来说不是一个选项。@DarkLite1,这样您就可以更改$quota.QuotaLimit=$Limit
行,但不能更改$Limit='15GB'
行?它从哪里来的?我已经更新了OP以便更清楚。因此,您可以看到数据来自何处。是的,这是一个有效的解决方法。但我确实需要能够将其转换为bytes/INT64。我无法更改源数据。@DarkLite1[int64]$Limit=15GB
那么?我确实需要一种方法将[String]$Limit='15GB'
转换为16106127360
。按照您的建议更改输入对我来说不是一个选项。@DarkLite1,这样您就可以更改$quota.QuotaLimit=$Limit
行,但不能更改$Limit='15GB'
行?它从哪里来的?我已经更新了OP以便更清楚。因此,您可以看到数据来自何处。