我在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;}
答案 0 :(得分:1)
伪代码似乎与你描述的不匹配,不知道属性的实际代码是什么样的,我猜你想要这样的东西:
$a | % {
if ($_.first) {
$c.options.filename = "$($_.First).$($_.last)"
} else {
$c.options.filename = $_.last
}
}