سؤال

أحاول استخدام PowerShell لإنشاء بعض النسخ الاحتياطية، ثم نسخها إلى مجلد ويب (أو بمعنى آخر، قم بتحميلها إلى مشاركة WebDAV).

في البداية اعتقدت أنني سأقوم بأشياء WebDAV من داخل PowerShell، ولكن يبدو أن هذا لا يزال يتطلب كمية عادلة من "العمل اليدوي"، أي: بناء طلبات HTTP. ثم استقرت لإنشاء مجلد ويب من البرنامج النصي واستيفاء Windows مع الاشياء WebDAV. يبدو أن كل ما يلزم لإنشاء مجلد ويب هو إنشاء اختصار قياسي، كما هو موضح هنا.

ما لا يمكنني معرفةه هو كيفية نسخ الملفات في الواقع إلى هدف الاختصار ..؟ ربما سأذهب حول هذه الطريقة الخطأ.

سيكون من المثالي إذا أمكن من تشفير بيانات الاعتماد بطريقة أو بأخرى ل WebDAV في البرنامج النصي، فقم بإنشاء مجلد الويب وتحويله عبر الملفات وحذف مجلد الويب مرة أخرى. أو حتى أفضل، لا تستخدم مجلد ويب على الإطلاق. الخيار الثالث سيكون مجرد إنشاء مجلد الويب يدويا واتركه هناك، على الرغم من أنني أفضل ذلك.

أي أفكار / مؤشرات / نصائح؟ :)

هل كانت مفيدة؟

المحلول 2

حسنا، في غضون ذلك تم ترقيته معا حل آخر. ربما سيكون من الاستخدام لشخص ما ..

Run.cmd] - تحتاج إلى تغيير مسار PowerShell

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nologo -noninteractive -command "C:\Scripts\RunBackup.ps1"

runbackup.ps1] - الملفات غير لها تأثير المطلوب، ربما شخص ما يمكن معرفة السبب؟

C:\Scripts\SqlBackup.ps1 | Out-File "C:\Scripts\log.txt"
C:\Scripts\SVNBackup.ps1 | Out-File "C:\Scripts\log.txt"
C:\Scripts\Zip.ps1 | Out-File "C:\Scripts\log.txt"

sqlbackup.ps1] - قد تحتاج إلى تعديل يتم تحميل تجميعات SMO التي يتم تحميلها، اعتمادا على إصدار SQL Server الخاص بك. لا تنسى ضبط مثيل $ و BKDIR $.

#http://www.mssqltips.com/tip.asp?tip=1862&home

$instance = ".\SQLEXPRESS"


[System.Reflection.Assembly]::LoadFrom("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SMO.dll") | out-null

[System.Reflection.Assembly]::LoadFrom("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SMOExtended.dll") | out-null

$s = new-object ("Microsoft.SqlServer.Management.Smo.Server") $instance

$bkdir = "c:\Backups" #We define the folder path as a variable
$dbs = $s.Databases
foreach ($db in $dbs)
{
     if($db.Name -ne "tempdb") #We don't want to backup the tempdb database
     {
     $dbname = $db.Name
     $dt = get-date -format yyyyMMddHHmm #We use this to create a file name based on the timestamp
     $dbBackup = new-object ("Microsoft.SqlServer.Management.Smo.Backup")
     $dbBackup.Action = "Database"
     $dbBackup.Database = $dbname
     $dbBackup.Devices.AddDevice($bkdir + "\" + $dbname + "_db_" + $dt + ".bak", "File")
     $dbBackup.SqlBackup($s)
     }

     if($db.RecoveryModel -ne 3) #Don't issue Log backups for DBs with RecoveryModel=3 or SIMPLE
     {
     $dbname = $db.Name
     $dt = get-date -format yyyyMMddHHmm #Create a file name based on the timestamp
     $dbBackup = new-object ("Microsoft.SqlServer.Management.Smo.Backup")
     $dbBackup.Action = "Log"
     $dbBackup.Database = $dbname
     $dbBackup.Devices.AddDevice($bkdir + "\" + $dbname + "_log_" + $dt + ".trn", "File")
     $dbBackup.SqlBackup($s)
     } 
}

SVNBACKUP.PS1] - مسارات الريبو والنسخ الاحتياطي

#set alias to svnadmin exe
set-alias svnadmin "C:\Program Files (x86)\CollabNet Subversion Server\svnadmin.exe"

#create dump
cmd.exe /c svnadmin dump "C:\Repo" `> "C:\Backups\svn.dmp"

#remove alias
remove-item alias:svnadmin

zip.ps1] - أن يكون لديك 7zip مثبتة، تعديل المسار 7z.exe إذا لزم الأمر

#set alias to command line version of 7zip
set-alias sevenz "c:\program files\7-zip\7z.exe"

#Backups location
cd 'C:\Backups'

#rar the contents of the directory
$dt = get-date -format yyyyMMddHHmm #We use this to create a file name based on the timestamp
$outputFileName = "SQLSVNBackup$dt.7z"
$exclude1 = "-x!*.rar"
$exclude2 = "-x!*.7z"
sevenz a -t7z "$outputFileName" *.* "$exclude1" "$exclude2"

#find all .bak files in the immediate directory 
dir '*.bak' | foreach-object{

#remove the bak file
remove-item $_.name

}


#find all .dmp files in the immediate directory 
dir '*.dmp' | foreach-object{

#remove the dmp file
remove-item $_.name

}

#find all .trn files in the immediate directory 
dir '*.trn' | foreach-object{

#remove the trn file
remove-item $_.name

}

#remove 7zip alias
remove-item alias:sevenz

انا إستعملت goodsync. النسخ الاحتياطي للنسخ الاحتياطي إلى WebDAV ومحكمة المهام الخاصة بتشغيل ملف .cmd ثم مزامنة / النسخة الاحتياطية Offsite.

نصائح أخرى

إذا كنت تستخدم PowerShell للنسخ الاحتياطي لمستودعات SVN الخاصة بك باستخدام تفريغ Svnadmin، فسيدرك أن الأنابيب إلى ملف سوف تفسد بصمت النسخ الاحتياطي بصمت.

يحب PowerShell تغيير الأشياء إلى UTF-16 عند الأنابيب، فإنه يغير أيضا ليلة UNIX إلى Windows Holided. سيعود هذا إلى تطاردك عند محاولة استعادة.

المشكلة الموصوفة جيدا هنا:

http://thouterfulcode.wordpress.com/201/2010/01/29/powershells-object-pipeline-corrolts-piped-binary-data/

الحل هنا:

http://www.microsoft.com/Communities/newsgroups/en-us/default.aspx؟dg=microsoft.public.windows.powershell&tid=e4cd89e9-427b-407d-a94f-c24be3f1e36f&cat=&lang=&cr=&sloc=&p=. 1.

باختصار، استخدم CMD.EXE بدلا من PowerShell:

cmd.exe /c svnadmin dump ... `> dumpfile.dump

لاحظ أن Backtick على إعادة توجيه الإخراج مطلوبة لإيقاف تحليل PowerShell.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top