Jump to content

Refnex

Newbie
  • Content Count

    29
  • Joined

  • Last visited

Community Reputation

10 Neutral

About Refnex

  • Rank
    Newbie
  1. Hi @ all, hatte sowas mal in vbs geschrieben. Hier Viel Spass '====================================================================================== ' ' Help file use html '====================================================================================== if msgbox("You like to show the Manual of this programm ?", vbYesNo,"Bulk File renamer powerd by xxx") = vbyes then Set wshshell = WScript.CreateObject("WScript.Shell") runman = "\\Server01\deployment$\Applications\Individual\HTM_Manuals_for_progs\Bulk_file_renamer\1.htm" wshshell.run(runman),0,false else ' hier code für nö end if '====================================================================================== '====================================================================================== ' Deklaration '====================================================================================== Dim oCmd, oFolder, oFSO, oFileList, oFile Dim sRenamePath, sRenamePrefix, sFileExtension, sConfirmRename, scriptcall Dim iFileCount, iFileIndex Dim bConfirmEach '====================================================================================== '====================================================================================== ' GUI Browse Folder '====================================================================================== ' Flags for the options parameter Const BIF_returnonlyfsdirs = &H0001 Const BIF_dontgobelowdomain = &H0002 Const BIF_statustext = &H0004 Const BIF_returnfsancestors = &H0008 Const BIF_editbox = &H0010 Const BIF_validate = &H0020 Const BIF_browseforcomputer = &H1000 Const BIF_browseforprinter = &H2000 Const BIF_browseincludefiles = &H4000 Dim wsh, objDlg, objF ' Get Application object of the Windows shell. Set objDlg = WScript.CreateObject("Shell.Application") ' Use the BrowseForFolder method. ' For instance: Set objF = objDlg.BrowseForFolder _ ' (&H0, "Select the folder to copy", &H10, "C:\Born") Set objF = objDlg.BrowseForFolder (&H0, _ "Please Select the folder to rename his Items", _ BIF_editbox + BIF_returnonlyfsdirs) ' Here we use the first method to detect the result. If IsValue(objF) Then sRenamePath = objF.Title Else WScript.quit() End If ' Here we use TypeName to detect the result. If InStr(1, TypeName(objF), "Folder") > 0 Then sRenamePath = objF.Title Else WScript.quit() End If Function IsValue(obj) ' Check whether the value has been returned. Dim tmp On Error Resume Next tmp = " " & obj If Err <> 0 Then IsValue = False Else IsValue = True End If On Error GoTo 0 End Function '====================================================================================== '====================================================================================== ' Choose Praefix '====================================================================================== sRenamePrefix = InputBox("Please input the Prefix for the Name", "Bulk File renamer powerd by xxx") If sRenamePrefix = "" Then wscript.Echo "Error no Praefix" WScript.quit() end if '====================================================================================== '====================================================================================== ' Rename Files in Loop '====================================================================================== 'Set wshshell = WScript.CreateObject("WScript.Shell") 'scriptcall = "rename.vbs" 'runthis = scriptcall & sRenamePath & sRenamePrefix 'wshshell.run(runthis) 'Set oCmd = Wscript.Arguments REM Select Case (oCmd.Count) REM Case 2 REM sRenamePath = oCmd.item(0) REM sRenamePrefix = oCmd.item(1) REM bConfirmEach = False REM Case 3 REM sRenamePath = oCmd.item(0) REM sRenamePrefix = oCmd.item(1) REM bConfirmEach = oCmd.item(2) REM Case Else REM WScript.Echo "RenameFiles.vbs requires 2 parameters:" &_ REM vbcrlf & "1) Folder Path (or . for current folder)" &_ REM vbcrlf & "2) File Prefix" &_ REM vbcrlf & "3) Confirm each file? True/*False* (optional)" REM WScript.Quit REM End Select ' ' Get a list of all files in the specified folder ' Set oFSO = CreateObject("Scripting.FileSystemObject") Set oFolder = oFSO.GetFolder(sRenamePath) Set oFileList = oFolder.Files For Each oFile in oFileList iFileCount = iFileCount + 1 Next For Each oFile in oFileList sFileExtension = Right(oFile.Name,Len(oFile.Name)-InStr(oFile.Name,".")) If (LCase(sFileExtension) <> "db" AND LCase(sFileExtension) <> "jbf") Then 'Skip thumbs.db and PSP.jbf files iFileIndex = iFileIndex + 1 If (bConfirmEach) Then sConfirmRename = LCase(InputBox("Rename " & oFile.Name & "?")) Else sConfirmRename = "y" End If If (sConfirmRename = "y") Then oFile.Move (sRenamePath & "\" & sRenamePrefix & "_" & _ ZeroFill(iFileIndex,Len(iFileCount)) & "." & sFileExtension) End If End If Next Set oFolder = Nothing Set oFSO = Nothing WScript.Echo "Done" WScript.Quit '====================================================================================== Function ZeroFill (sString, iFieldLength) ZeroFill = Right(String(iFieldLength, "0") & Ltrim(sString), iFieldLength) End Function
  2. Perfect super danke das hat mir sehr geholfen
  3. Hi Sorry war noch unterwegs, Kannst du das etwas Spezifizieren ? Meinst du so ? # Auslesen der Ist Situation Ausgabe Name und Host auf dem die VM derzeit läuft $Array_VM_is = @(Get-ClusterGroup | select Name, OwnerNode) # Auslesen des Prefferiertem Node $Array_VM_want =@(Get-ClusterGroup | Get-ClusterOwnerNode ) #| select OwnerNodes $New = $Array_VM_is | Where {$Array_VM_want -NotContains $_} $New.OwnerNodes Dort bekomme ich Gar kein ergebniss wenn ich mir die Variable New.OwnerNodes ausgeben lasse Lasse ich mir aber die Variable New.OwnerNode " ACHTUNG ohne S " bekomme ich das gleiche ergebniss wie vorher. Name ID State HyperV-Host (Id des Node) Up/Down Hierzu sei auch gesagt das bei den Beiden Abfragen in zu den VM und den Hosts die Parameter bei den VM´s in (wo sie Momentan laufen ) als OwnerNode ( ohne s ) angegeben werden und bei der Abfrage Wo sie laufen sollten der Node als OwnerNodes ( mit s ) angegeben wird. Bin echt a bissal ratlos
  4. Hallo Zusammen, Ich muss ein Kleines Script in Powershell erstellen das Folgendes erledigt: Ausgangs Situation ist ein Cluster mit mehreren Nodes, Das script soll ermitteln Auf welchem Node gerade eine VM Läuft und welcher Node der Owner ist (Bevorzugter Besitzer Node ist ) Wenn ddie VM auf dem Falschen Node Läuft soll soll sie Via Live Migration verschoben werden. Ich habe versuch mit Folgenden Die Situation zu ermitteln: Die Ist situation: $Array_VM_is = @(Get-ClusterGroup | select Name, OwnerNode) Dies gibt mir auch schön aus Auf Welchem Node Gerade Die VMs laufen und Pumpt sie in ein Array. Die Soll Situation: $Array_VM_want =@(Get-ClusterGroup | Get-ClusterOwnerNode ) Zeigt mir dann an welcher der Owner (Bevorzugter Besitzer Node ist ) Wie kann ich nun am besten diese Zwei spalten, Array_VM_is "OwnerNode" mit der Spalte aus Array_VM_want "OwnerNodes" Vergleichen und mir die Falschen Maschienen ausgeben lassen ? Ich habe es schon versucht mit forEach ($Node in $Array_VM_is) { if ($Array_VM_want.OwnerNodes -contains $Node.OwnerNode){ echo $Node.OwnerNode } } #echo $compare jedoch bekomme ich hier nur Die HyperV Nodes Ausgegeben im Format: Name ID State HyperV-Host (Id des Node) Up/Down Das Selbe Ergebniss wenn ich versuche sie mit compare zu Vergleichen Compare-Object -ReferenceObject $Array_VM_is.OwnerNode -DifferenceObject $Array_VM_want.OwnerNodes Kann mir hier jemand weiterhelfen ? Gruss
  5. Moin, Gehört ja, Getestet ? Ja nach besten wissen und gewissen. jedoch bekomme ich hier eine sehr für mich Cryptische Ausgabe. #TYPE Microsoft.PowerShell.Commands.Internal.Format.FormatStartData "ClassId2e4f51ef21dd47e99d3c952918aff9cd","pageHeaderEntry","pageFooterEntry","autosizeInfo","shapeInfo","groupingEntry" "033ecb2bc07a4d43b5ef94ed5a35d280",,,"Microsoft.PowerShell.Commands.Internal.Format.AutosizeInfo","Microsoft.PowerShell.Commands.Internal.Format.TableHeaderInfo", "9e210fe47d09416682b841769c78b8a3",,,,, "27c87ef9bbda4f709f6b4002fa4af63c",,,,, "27c87ef9bbda4f709f6b4002fa4af63c",,,,, "27c87ef9bbda4f709f6b4002fa4af63c",,,,, "27c87ef9bbda4f709f6b4002fa4af63c",,,,, "4ec4f0187cb04f4cb6973460dfe252df",,,,, "cf522b78d86c486691226b40aa69e95c",,,,, ok danke fehler gefunden -closed-
  6. Hi @ all ich habe ne kleine frage. Ich habe hier ein Script was mir die Hyper-V CSV belegung ausgibt #Loads the FailoverClusters module Import-Module FailoverClusters $objs = @() #Write the name of your cluster instead of “clustername” $csvs = Get-ClusterSharedVolume -Cluster meinserver.irgendwas.com foreach ( $csv in $csvs ) { $csvinfos = $csv | select -Property Name -ExpandProperty SharedVolumeInfo foreach ( $csvinfo in $csvinfos ) { $obj = New-Object PSObject -Property @{ Name = $csv.Name Path = $csvinfo.FriendlyVolumeName Size = $csvinfo.Partition.Size FreeSpace = $csvinfo.Partition.FreeSpace UsedSpace = $csvinfo.Partition.UsedSpace PercentFree = $csvinfo.Partition.PercentFree } $objs += $obj } } #Writes the output in a nice-looking format to “filname” (insert your own) $objs | ft -auto Name,Path,@{ Label = “Size(GB)” ; Expression = { “{0:N2}” -f ($_.Size/1024/1024/1024) } },@{ Label = “Free(GB)” ; Expression = { “{0:N2}” -f ($_.FreeSpace/1024/1024/1024) } },@{ Label = “Used(GB)” ; Expression = { “{0:N2}” -f ($_.UsedSpace/1024/1024/1024) } },@{ Label = “PercentFree” ; Expression = { “{0:N2}” -f ($_.PercentFree) } } | out-file “filename.txt” -Encoding default Dieser liefert mir ein Brauchbares ergebniss Name Path Size(GB) Free(GB) Used(GB) PercentFree ---- ---- -------- -------- -------- ----------- Volume1 - VM-01-R5 C:\ClusterStorage\Volume1 826,56 226,59 599,97 27,41 Volume2 - VM-02-R5 C:\ClusterStorage\Volume2 836,56 242,72 593,84 29,01 Volume3 - VM-03-R5 C:\ClusterStorage\Volume3 1 394,36 450,08 944,27 32,28 Volume4 - VM-04-R5 C:\ClusterStorage\Volume4 1 673,25 416,77 1 256,48 24,91 Jedoch will ich hier noch für ein anderes Programm eine Semikolon Trennung. Name Path Size(GB) Free(GB) Used(GB) PercentFree ---- ---- -------- -------- -------- ----------- Volume1 - VM-01-R5 ; C:\ClusterStorage\Volume1 ; 826,56 ; 226,59 ; 599,97 ; 27,41 Volume2 - VM-02-R5 ; C:\ClusterStorage\Volume2 ; 836,56 ; 242,72 ; 593,84 ; 29,01 Volume3 - VM-03-R5 ; C:\ClusterStorage\Volume3 ; 1 394,36 ; 450,08 ; 944,27 ; 32,28 Volume4 - VM-04-R5 ; C:\ClusterStorage\Volume4 ; 1 673,25 ; 416,77 ; 1 256,48 ; 24,91 Wie bekomme ich das hin ? Sorry habe mit Powershell noch nicht wirklich gearbeitet bin mehr oldshool vbs ;-) Danke für eure hilfe Gruss
  7. Problem solved by other Forum Danke an alle fürs Helfen und ein schönes Fest pls closed
  8. Hallo Sunny61, Das die Combi nicht der Bringer ist ist mir klar, und den Artikel zur EventId habe ich auch schon gefunden und Die DB Files und Paths auf zugriffs Berechtigungen geprüft hier ist alles iO. Jedoch verstehe ich deine Aussage nicht ganz ?? Nicht jeder ist SQL er genauso wie nicht jeder Routig und Switching kann ;-) ich würd auch nicht im Cisco Forum schreiben wenn jemand mit nen Catalyst Probelme hatt " Ist ne schlechte Kombination, Wie Wär es jemanden dazu zu holen " sonder würd ihm Probieren zu Helfen ;-) Aber danke für deinen Aufschlussreiche Hilfestellung PS: nimms Bitte Jetzt nicht Persönlich gegen deine Person ;-) Gruss
  9. Hi @ all SQL er, Ich habe hier ein Kleines Grosses Problem. Leider ist uns auf dem Monitorring Server (ActiveExperts) die HDD gecrasht. Der Server und Alle Tools wie Ridgline etc... laufen nach dem Restore auch gut, jedoch die Verbindungen auf die DB's bekomme ich nicht UP. Hier erhalte ich immer folgenden Fehler egal was ich mache ;-( ================================================================================================== TITLE: Microsoft SQL Server Management Studio ------------------------------ Cannot show requested dialog. ------------------------------ ADDITIONAL INFORMATION: Failed to retrieve data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&LinkId=20476 ------------------------------ An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo) ------------------------------ Database 'msdb' cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details. (Microsoft SQL Server, Error: 945) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.2500&EvtSrc=MSSQLServer&EvtID=945&LinkId=20476 ------------------------------ BUTTONS: OK ------------------------------ ================================================================================================== Leider habe ich keinerlei Ahnung von MSSql und ich hoffe mir kann hier jemand helfen die DB wieder ans laufen zu bringen. Grüsse an alle
  10. super danke für deine Antwort, Ja üblich ist das nicht aber in meinem fall leider sonst nicht änderbar da ich sonst alle acl`s doppeld erstellen muss -,- und so spare ich mir doch etwas arbeit. Danke und nen Schönen nachmittag noch -closed
  11. Hallo @ all Ich denke die Cisco Cracks uter euch können mir sicher weiterhelfen. es geht um Folgendes: Ich habe hier ein SAP System Stehen wo der Zugriff auf geweisse Server per ACL beschränt werden soll. Es Handelt aber hierbei um Exreme Switches, Die ACL soll folgendermasen aussehen z.B. es sollen DNS abfragen aus dem Netz 10.50.0.0/24 auf 2 server mit der IP 10.0.1.12 und 10.0.1.13 erlaubt werden die Regle schaut nun folgendermasen aus entry Sap-to-DNS-DCs { if { source-address 10.50.0.0/24; destination-address 10.0.1.12/31; protocol tcp; source-port 1688; destination-port 1688; } then { permit; count DNS-DCs; } } geht das mit der Prefix angabe /31 da es sich hierbei laut RFC3021 nur für eine Point-to-Point verbindungen eraubt ist. oder ist das ne absolute vergewaltigung ? Abeer meiner meinung nach sollte es doch möglich sein da es bei einer ACL ja keine Broadcast und Netzadresse gibt oder ? Ich hoffe ihr versteht was ich meine sont einfach nochmal fragen ;-) Danke für eure hilfe
  12. Hi @ all hab da mal so ne keine frage und hoffe es kann mir jemand helfen. Ich muss gerade nen Script basteln was Auf dem Server via Schedule Job ausgeführt wird und immer in einer csv die Daten von den Festplatten (Gesamt, Belegt) einträgt und dann in ein weiteres File dumpt zur weiter Bearbeitung. Dieses file soll eine XLS sein und die dort übernommenen Server anhand ihres namens immer in ein neues Tabellen Blatt eingefügt werden. das zusammen Sammeln und das Speichen bzw. Convertiren in XLS bekomme ich noch hin aber mit der Sortierung tu ich mir schwer Hier mal der Source das ihr wisst was das dingens Treibt '------------------------------------------ ' Ermittlung des Computernamens Set MyFiles = CreateObject("Scripting.FileSystemObject") Set wshnet = CreateObject("WScript.Network") Set wshshell = CreateObject("WScript.Shell") Dim strComputer strComputer = wshnet.Computername 'Auslesen der Windows-Hardwareinformationen ' Um weitere laufwerke hinzu zu fügen verwenden Sie folgenden String ' " if objItem.Caption = "(Laufwerk buchstabe):" then (festplatten ausgabe variable)= objItem.Caption & " ; " & Round(objItem.FreeSpace /1024 /1024 /1024, 2) & " ; " & Round(objItem.Size /1024 /1024 /1024,2) & " ; " & " GByte" ' achten sie Bitte darauf das sie auch die ausgabe in Zeile Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk",,48) For Each objItem in colItems if objItem.Caption = "C:" then festplatteC= objItem.Caption & "; " & Round(objItem.FreeSpace /1024 /1024 /1024, 2) & " ; " & Round(objItem.Size /1024 /1024 /1024,2) & ";" & " GByte" if objItem.Caption = "D:" then festplatteD= objItem.Caption & "; " & Round(objItem.FreeSpace /1024 /1024 /1024, 2) & " ; " & Round(objItem.Size /1024 /1024 /1024,2) & ";" & " GByte" Next ' Datum und Uhrzeit ermitteln Dim ausgabe Dim datum Dim zeit set ausgabe = WScript.CreateObject("WScript.Shell") datum = Date zeit = Time timestamp = datum & " " & zeit '=================================================================================== ' FOR DEBUGING '=================================================================================== ' Messagebox mit den abgefragten Werten erzeugen und anzeigen lfür Debug 'Meldung = "Folgende Daten wurden ermittelt:" & VbCr & VbCr ' ACHTUNG wie oben beschreiben bei zugefügtem laufwerk bitte ausgabe anpassen 'Example "Add "Festplatte C: " & festplatteC" 'Add "Festplatte C: " & festplatteC 'Add "Festplatte D: " & festplatteD 'Add "Timestamp: " & timestamp 'MsgBox Meldung,,"Ergebnis:" '==================================================================================== Sub Add(text) ' fügt Text hinzu Meldung = strComputer & Meldung & text & vbCrLf End Sub '=================================================================================== ' FOR DEBUGING '=================================================================================== 'Frage_Logfile = "Sollen diese Angaben in das Logfile eingetragen werden?" 'antwort = MsgBox(Frage_Logfile, vbYesNo + vbQuestion,"Logeintrag erzeugen?") 'if antwort = vbNo then ' MsgBox "Kein Logeintrag geschrieben.",vbExclamation,"Abbruch" 'WScript.Quit 'end if '====================================================================================== ' Erzeugung des Strings für die Logdatei Logeintrag = timestamp & ";" & strComputer & ";" & festplatteC & ";" & festplatteD ' Deklaration der Variablen für das Logfile filename = "d:\HW-Infos.csv" ' <---- Hier den Pfad und den Dateinamen des zu schreibenden Logfiles eintragen Const ForAppending = 8 Set fs = CreateObject("Scripting.FileSystemObject") ' Logdatei zum Anhängen der Eintrage laden Set textstream = fs.OpenTextFile(filename, ForAppending, True) ok = (Err.number = 0) If ok Then On Error Goto 0 textstream.WriteLine Logeintrag textstream.Close' Logeintrag_OK = "Folgender Logeintrag wurde erzeugt:" & vbcr & vbcr & Logeintrag ' MsgBox Logeintrag_OK,,"Logeintragung erfolgreich:" Else MsgBox "Fehler: " & Err.Description End If '=========================================================================================================== ' Convert CSV to XLS '=========================================================================================================== Dim sInFile sOutPathDefault = "d:\KonvertierteCSV" 'Angabe des Default-Zielpfades ohne abschließenden "\" sInFile = filename Set fso = CreateObject("Scripting.FileSystemObject") If Not fso.FileExists(sInFile) Then WScript.Echo sInFile & " nicht gefunden!" WScript.Quit(1) Else 'Pfad der Quelldatei zerlegen Set oInFile = fso.GetFile(sInFile) 'für vollständige Dateiangaben aus Dateisystem sInPath = oInFile.Path 'voller Quelldateipfad - wird zum Einlesen verwendet sInFileName = Left(oInFile.Name, InstrRev(oInFile.Name, ".") - 1) 'Dateiname ohne Pfad und Typ sInFileType = Mid(oInFile.Name, InstrRev(oInFile.Name, ".")) 'für Überprüfung auf CSV Set oInFile = Nothing End If If WScript.Arguments.Count > 1 Then sOutFilePath = WScript.Arguments(1) 'angegebenen Zielpfad verwenden Else sOutFilePath = sOutPathDefault 'kein Zielpfad angegeben - Default verwenden End If If Not fso.FolderExists(sOutFilePath) Then 'Zielpfad nicht vorhanden, daher ... On Error Resume Next fso.CreateFolder(sOutFilePath) '... zu erstellen versuchen If Err.Number > 0 Then WScript.Echo "Ungueltiger Zielpfad: " & sOutFilePath WScript.Quit(1) Else On Error Goto 0 'Standardfehlerbehandlung wieder einschalten End If End If If LCase(sInFileType) = ".csv" Then 'bei Typ ".csv" für Import in Temp-File kopieren sInPathTemp = sOutFilePath & "\" & sInFileName & ".tmp" 'Temp-File im Zielverzeichnis anlegen (Annahme: dort Schreibrechte) fso.CopyFile sInPath, sInPathTemp sInPath = sInPathTemp 'Daten aus Temp-File lesen End If sOutPath = sOutFilePath & "\" & sInFileName & ".xls" 'Zieldateipfad erstellen Do While InStr(sOutPath, "\\") 'vermeiden doppelter (mehfacher) "\" im Zieldateipfad (stört Excel offensichtlich nur beim Speichern) sOutPath = Replace(sOutPath, "\\", "\") Loop Set oXL = CreateObject("Excel.Application") With oXL .Workbooks.OpenText sInPath, , , 1, , , , True, , , , ,Array(Array(1, 1),Array(2, 2)) On Error Resume Next .ActiveWorkbook.ActiveSheet.Cells.EntireColumn.AutoFit 'Optimale Spaltenbreite für alle Spalten setzen .DisplayAlerts = False 'Keine Rückfrage beim Überschreiben schon vorhandener Zieldatei .ActiveWorkbook.SaveAs sOutPath, -4143 'Speichern als .xls If Err.Number > 0 Then CleanUp WScript.Echo sOutPath & " konnte nicht gespeichert werden!" WScript.Quit(1) End If End With CleanUp Sub CleanUp oXL.Quit Set oXL = Nothing If LCase(sInFileType) = ".csv" Then On Error Resume Next fso.DeleteFile sInPathTemp 'temporäre Import-Datei zu löschen versuchen End If End Sub evtl fällt euch ne Idee ein wie das klappen soll thx schönes we Ben
  13. ok danke das war das was ich hören wollte und mir auch schon gedacht habe. und Daumen hoch für die sehr fixe Antwort (hutab) Einen schönen Tag noch
  14. Hi @ all Ich habe mal eine Frage, Ich als absoluter Exchange low-pro habe eine Frag zum Thema Freigabe eines Postfaches über die console von Exchange. Situation: Person 1 ist im Krankenstand Person 2 ist für 4 Monate im Urlaub Person 3 ist anwesend Person 4 ist anwesend und Chef Nun will der Chef der Abteilung Zugriff auf die Postfächer von Person 1,2,3 Diesen kann man ja über die Verwaltungsconsole von Exchange mit Rechtsklick auf das Postfach und Manage Full Access Permissions bewerkstelligen, Meine Frage an euch sieht er dann das Komplette Postfach inklusive unter Ordner etc…. Oder gibt es auch hier irgendwelche Restriktionen? Danke für eure Antworten und einen schönen Tag noch
  15. ok ^^ Dann kann ich leider auch nicht sagen woran es gelegen hat :confused: nu bin ich auch wieder etwas schlauer, Danke für deine ausfürliche antwort. gruss an alle und ein schönes Fest
×
×
  • Create New...