如果条件存在,则在字符串中包含句点(内联)

时间:2013-10-03 18:03:05

标签: powershell

我在foreach循环中有变量$。

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

$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是空白还是空或空。不确定是否重要。

当前设置的方式,如果schema为空(?),则文件名为“.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;}                                                        

1 个答案:

答案 0 :(得分:1)

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

$a | % {
 if ($_.first) { 
     $c.options.filename = "$($_.First).$($_.last)" 
 } else {
     $c.options.filename = $_.last
 }
}