Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 将字符串转换为字节_String_Powershell_Type Conversion - Fatal编程技术网

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以便更清楚。因此,您可以看到数据来自何处。