0

我在 foreach 循环中有变量 $a 。

我想为文件名设置一个字符串。

$server = "mysqlservername"
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SmoEnum') | out-null
$My='Microsoft.SqlServer.Management.Smo'
$srv = new-object ("$My.Server") $Server
$scripter = new-object ("$My.Scripter") $srv 
$scripter.Options.ToFileOnly = $true   

$a = new-object System.Data.Datatable

$a=$srv.databases[$Database].EnumObjects([long]0x1FFFFFFF -band $all) 

$a | FOREACH-OBJECT 
{
$scripter.Options.Filename = "$($_.schema).$($_.name)"
#then script out an object using that filename)
$UrnCollection = new-object ('Microsoft.SqlServer.Management.Smo.urnCollection')
$URNCollection.add($_.urn)
$scripter.script($URNCollection)
}

我希望文件名是“schema.name”,但前提是 $_.schema 存在(并非所有对象都有模式)。如果不是,我希望它只是“名称”

我不确定,当它为空时,$a.schema 是否为空、null 或空。不确定这是否重要。

当前设置的方式,如果架构为空(?),文件名是“.myobjectnamehere”。

有没有办法在一行中做到这一点?我可以用大量的 IF 条件来做到这一点,但如果可以的话,我宁愿内联。谢谢。

这是 $a | 的内容 通用汽车

   TypeName: System.Data.DataRow

Name                MemberType            Definition                                                                   
----                ----------            ----------                                                                   
AcceptChanges       Method                void AcceptChanges()                                                         
BeginEdit           Method                void BeginEdit()                                                             
CancelEdit          Method                void CancelEdit()                                                            
ClearErrors         Method                void ClearErrors()                                                           
Delete              Method                void Delete()                                                                
EndEdit             Method                void EndEdit()                                                               
Equals              Method                bool Equals(System.Object obj)                                               
GetChildRows        Method                System.Data.DataRow[] GetChildRows(string relationName), System.Data.DataR...
GetColumnError      Method                string GetColumnError(int columnIndex), string GetColumnError(string colum...
GetColumnsInError   Method                System.Data.DataColumn[] GetColumnsInError()                                 
GetHashCode         Method                int GetHashCode()                                                            
GetParentRow        Method                System.Data.DataRow GetParentRow(string relationName), System.Data.DataRow...
GetParentRows       Method                System.Data.DataRow[] GetParentRows(string relationName), System.Data.Data...
GetType             Method                type GetType()                                                               
HasVersion          Method                bool HasVersion(System.Data.DataRowVersion version)                          
IsNull              Method                bool IsNull(int columnIndex), bool IsNull(string columnName), bool IsNull(...
RejectChanges       Method                void RejectChanges()                                                         
SetAdded            Method                void SetAdded()                                                              
SetColumnError      Method                void SetColumnError(int columnIndex, string error), void SetColumnError(st...
SetModified         Method                void SetModified()                                                           
SetParentRow        Method                void SetParentRow(System.Data.DataRow parentRow), void SetParentRow(System...
ToString            Method                string ToString()                                                            
Item                ParameterizedProperty System.Object Item(int columnIndex) {get;set;}, System.Object Item(string ...
DatabaseObjectTypes Property              string DatabaseObjectTypes {get;set;}                                        
Name                Property              string Name {get;set;}                                                       
Schema              Property              string Schema {get;set;}                                                     
Urn                 Property              string Urn {get;set;}                                                        
4

1 回答 1

1

该伪代码似乎与您描述的不匹配,不知道实际代码 $a 属性是什么样的,我猜您想要这样的东西:

$a | % {
 if ($_.first) { 
     $c.options.filename = "$($_.First).$($_.last)" 
 } else {
     $c.options.filename = $_.last
 }
}
于 2013-10-03T18:14:36.077 回答