我遇到了一个奇怪的错误,有时在执行我的脚本时也会出现这种情况。错误是:
Method invocation failed because [System.Object[]] does not contain a method named 'op_Subtraction'.我得到此错误的行是:
$LineNr = $dbsnap_file | Select-String -Pattern $check | Select-Object -ExpandProperty LineNumber
$del = $dbsnap_file[$LineNr-13] -split ':' | Select-Object -Last 1$dbsnap_file是gc (some_file)。该文件内容如下:
AllocatedStorage : 5
AvailabilityZone : us-west-1a
DBInstanceIdentifier : test-multisite
DBSnapshotIdentifier : test-multisite-2015-09-03-04-15
Encrypted : False
Engine : mysql
EngineVersion : 5.6.19a
InstanceCreateTime : 12/19/2014 5:19:26 AM
Iops : 0
KmsKeyId :
LicenseModel : general-public-license
MasterUsername : root
OptionGroupName : default:mysql-5-6
PercentProgress : 100
Port : 3306
SnapshotCreateTime : 9/2/2015 11:15:36 PM
SnapshotType : automated$check的值类似于测试-多站点-2015-09-03-04-15。所以,作为$del,我得到的是SnapshotCreateTime。
我是断断续续地收到这个错误,有时是工作,有时不是。有人能帮我解决一下什么问题吗?
发布于 2015-09-10 14:46:19
就像CB所说的那样,Select-String将返回所有的比赛。你只期待一个,而代码是围绕着这个假设构建的。您所得到的错误是相当明显的。
[System.Object[]] does not contain a method named 'op_Subtraction'您试图从对象中减去13,而不是整数。正如在chat中讨论的那样,原来的问题是源文件有双倍的数据。
在这种情况下,解决方案是清理您的源。如果您对假设感到满意,也可以通过更新select来解决这个问题。
$LineNr = $dbsnap_file | Select-String -Pattern $check | Select-Object -First 1 -ExpandProperty LineNumber这将确保只返回一个。请注意,你忽略了真实的数据。因此,验证$LineNr的来源和内容是我在这里推荐的解决方案。
https://stackoverflow.com/questions/32503516
复制相似问题