לא שמתי לב שכתבת את זה
ותוך כדי כבר הגעתי לתשובה שכתבת ובכל אופן תודה רבה
בשביל לגשת לנתיב שלו אני צריך לגשת ל
$changes.InputObject.path
לא שמתי לב שכתבת את זה
ותוך כדי כבר הגעתי לתשובה שכתבת ובכל אופן תודה רבה
בשביל לגשת לנתיב שלו אני צריך לגשת ל
$changes.InputObject.path
@yossiz
מחזיר שגיאה
Compare-Object : A positional parameter cannot be found that accepts argument 'Coalesce'.
At line:5 char:12
+ $changes = Compare-Object Coalesce($folder1Items, @()) Coalesce($fold ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Compare-Object], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.CompareObjectCommand
אני שם לב שהחסרתי אולי קצת דברים (אמנם כתבתי אותם בנושאים אחרים אב נכתוב את זה גם כאן)
הקוד הראשון שלי היה
$changes = Compare-Object $folder1Items $folder2Items -Property Name, Path -IncludeEqual
הפלט שאני מקבל הוא
Name Path SideIndicator
---- ---- -------------
X:\MyBackup\Test\Backup.ps1 =>
X:\MyBackup\Test\Untitled1.ps1 =>
X:\MyBackup\Test\Untitled2.ps1 =>
X:\MyBackup\Test\Untitled3.ps1 =>
X:\MyBackup\Test\zz.ps1 =>
X:\MyBackup\Test\מצגת של Microsoft PowerPoint חדש.pptx =>
X:\MyBackup\Test\hj;j\jhtsezkty yfhgvf gf;.txt =>
X:\MyBackup\Test\hj;j\תיקיה חדשה\jhfd.pub =>
X:\MyBackup\Test\uri\שדגכעגכי ד.txt =>
X:\MyBackup\Test\uri\מסמך טקסט חדש.txt =>
X:\MyBackup\Test\uri\hgfjf\ggg.accdb =>
X:\Test\Backup.ps1 <=
X:\Test\Untitled1.ps1 <=
X:\Test\Untitled2.ps1 <=
X:\Test\Untitled3.ps1 <=
X:\Test\zz.ps1 <=
X:\Test\מצגת של Microsoft PowerPoint חדש.pptx <=
X:\Test\hj;j\jhtsezkty yfhgvf gf;.txt <=
X:\Test\hj;j\תיקיה חדשה\jhfd.pub <=
X:\Test\uri\שדגכעגכי ד.txt <=
X:\Test\uri\מסמך טקסט חדש.txt <=
X:\Test\uri\hgfjf\ggg.accdb <=
בשים לב שהקבצים מ2 התיקיות תואמים אבל הוא לא מחזיר כלל ==
היות והוא בודק לפי שם ונתיב והנתיב לא תואם.
עשיתי בדיקה רק לפי MD5
ואני מקבל תוצאה של ==
מה שקורה הוא שאם אני בודק לפי MD5 אני לא מקבל במערך שום ערך אלא רק ==
או = >
וכו'.
אמנם כאשר אני בודק בלי שום פרמטר הוא בודק לפי הMD5 אבל מחזיר מערך כמו שכתבתי בפוסט הראשון.
פתרונים????
@dovid כתב באיך לחלץ את הערך Path מתוך מערך Powershall:
נראה לי ככה, תבדוק אם עובד
$changes[0].Path
לא מחזיר כלום
@yossiz כתב באיך לחלץ את הערך Path מתוך מערך Powershall:
@dovid נראה לי שהוא רוצה לקבל מערך של כל ה-
Path
$changes | select Path
או באריכות
$changes | Select-Object -Property Path
אכן אני רוצה לקבל מערך
אבל משום מה הוא לא מחזיר לי את הנתיב אלא שורות ריקות.
PS X:\test> $changes | select Path
Path
----
PS X:\test> $changes | Select-Object -Property Path
Path
----
PS X:\test>
אני מקבל מערך בדוגמת הפלט הבא
PS X:\test> $changes
InputObject SideIndic
ator
----------- ---------
@{Algorithm=MD5; Hash=9B0888BB0C3833206679572E35E7A71D; Path=X:\Test\Backup.ps1} ==
@{Algorithm=MD5; Hash=F0E6F573D63B1F92D16A55714F49B063; Path=X:\Test\Untitled1.ps1} ==
@{Algorithm=MD5; Hash=9A7CA20549218DE334060E3B30CAAEAE; Path=X:\Test\Untitled2.ps1} ==
@{Algorithm=MD5; Hash=40177EA95504C4CC9C0F51F0A18BDF1F; Path=X:\Test\Untitled3.ps1} ==
@{Algorithm=MD5; Hash=DF19BFB4A1F8829AD055854AD8027FBF; Path=X:\Test\zz.ps1} ==
@{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\מצגת של Microsoft PowerPoint חדש.pptx} ==
@{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\hj;j\jhtsezkty yfhgvf gf;.txt} ==
@{Algorithm=MD5; Hash=0627B4727E2BFE1D1CB7F06B82BFCC5C; Path=X:\Test\hj;j\תיקיה חדשה\jhfd.pub} ==
@{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\uri\שדגכעגכי ד.txt} ==
@{Algorithm=MD5; Hash=D41D8CD98F00B204E9800998ECF8427E; Path=X:\Test\uri\מסמך טקסט חדש.txt} ==
@{Algorithm=MD5; Hash=15EDAC198DFF6373F91CA0E59FA054FD; Path=X:\Test\uri\hgfjf\ggg.accdb} ==
ואני רוצה לשלוף רק את הערך Path (נתיב) מתוך המערך
ניסיתי את זה וללא הצלחה
$changes.Path
וכן את זה וללא הצלחה
$changes.@{Path}
אני משתמש בקוד הבא
$folder1Items = Get-ChildItem $folder1 -Recurse | Get-FileHash -Algorithm MD5
$folder2Items = Get-ChildItem $folder2 -Recurse | Get-FileHash -Algorithm MD5
$changes = Compare-Object $folder1Items $folder2Items -Property Name, Path -IncludeEqual
אבל אם 1 מהפרמטרים הוא null הוא מחזיר שגיאה של
Compare-Object : Cannot bind argument to parameter 'DifferenceObject' because it is null.
At line:22 char:41
+ $changes = Compare-Object $folder1Items $folder2Items -Property Name, ...
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Compare-Object], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.CompareObje
ctCommand
כלומר אם אחד מהפרמטרים לא מכיל שום קובץ אני מקבל את השגיאה הנ"ל.
ברצוני שימשיך להשוות גם מול 0 קבצים כלומר שהתוצאה תהיה שהכל לא תואם.
לתועלת הציבור הקוד הזה עובד מעולה
$folder1 = "X:\Test"
$folder2 = "X:\MyBackup\Test"
$folder1Items = Get-ChildItem $folder1 -Recurse | Get-FileHash -Algorithm MD5
$folder2Items = Get-ChildItem $folder2 -Recurse | Get-FileHash -Algorithm MD5
$changes = Compare-Object $folder1Items $folder2Items -Property Name, Path -IncludeEqual
$updated = $changes | Where-Object {$_.SideIndicator -eq "<="}
$updated | ForEach-Object {
$ww = (Get-Item $_.Path).DirectoryName.replace($folder1,$folder2)
if (!(Test-Path -path $ww)) {
New-Item $ww -Type Directory
}
Copy-Item $_.Path $ww -Force
}
כמובן שיש לשנות את הנתיבים
מצאתי זה מסיר את שם הקובץ
(Get-Item $updated.Path).DirectoryName
עובד, אבל צריך להסיר לאחר ההחלפה של הנתיבים את שם הקובץ והסיומות כי הוא פותח תיקייה בשם של הקובץ
@yossiz כתב באיך מעתיקים קובץ ממיקום אחד לשני תוך שמירה על חלק מהנתיב | Powershall:
@אוריי משהו כזה עובד?
(לא בדקתי אם זה עובד)$updated | ForEach-Object { $dest = $folder2 + ($_.Path -replace $folder1) if (!(Test-Path -path $dest)) { New-Item $dest -Type Directory }) Copy-Item $updated.Path $dest -Force }
מחזיר שגיאה כבר בשורה הזו
$dest = $folder2 + ($_.Path -replace $folder1)
פלט של שורה בודדת (לאחר הרצת כל הקוד שלפני)
PS X:\test> $dest = $folder2 + ($_.Path -replace $folder1)
The regular expression pattern X:\Test\ is not valid.
At line:1 char:1
+ $dest = $folder2 + ($_.Path -replace $folder1)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (X:\Test\:String) [], RuntimeException
+ FullyQualifiedErrorId : InvalidRegularExpression
בניתי סקריפט של גיבוי קבצים (מבקש ומתחנן אנא אל תציעו לי תוכנות גיבוי זה לא מה שאני מחפש...)
הקוד כדלהלן
$folder1 = "X:\Test\"
$folder2 = "X:\MyBackup\Test\"
$folder1Items = Get-ChildItem $folder1 -Recurse | Get-FileHash -Algorithm MD5
$folder2Items = Get-ChildItem $folder2 -Recurse | Get-FileHash -Algorithm MD5
$changes = Compare-Object $folder1Items $folder2Items -Property Name, Path -IncludeEqual
$updated = $changes | Where-Object {$_.SideIndicator -eq "<="}
Copy-Item $updated.Path $folder2 -Recurse -Force
הקוד עובד מעולה אבל אני רוצה לשמור על נתיבים יחסיים.
זה צילום של קובץ המקור "X:\Test\"
וזה תיקיית המשנה uri
וזה תיקיית היעד "X:\MyBackup\Test\"
הקוד העתיק לי ולא יצר לי תיקייה בשם uri והעתיק לשם את 2 הקבצים.
איך אני יכול להעתיק ולשמור על נתיב יחסי.
אני חושב שהכללים די ברורים, תמיד אפשר לצאת מהכללים ולהתחרט על טעויות..
שיהיה בהצלחה.
החשש שמא יחברו בין 2 החומים או ינסו לחבר חום וכחול לשקע מ2 מעגלים
היות שאני לא חשמלאי ולא בקי בשמות ארצה לוודא שאנחנו מדברים על אותו דבר.
כשאתה אומר מעגל או שני מעגלים אתה מתכווין לפיוז או שני פיוזים?
ובמקרה שלי, יש פיוז שמביא חשמל לשקעים לכל החדר שינה, ויש פיוז שמביא תאורה לכל הבית (כמעט), ומה שאני רוצה לעשות זה להוציא כבל ירוק חדש מהשקע ולחבר אליו תאורה חדשה. בזה אמור להיות בעיה?
יכול להיות שכתבתי את זה כבר לעיל אבל אני רוצה לוודא שזה בסדר.
תודה.
אני כבר כתבתי לך כבר לעיל שאם אתה מושך חשמל מהשקע לתאורה החדשה אין שום בעיה וכמובן שאתה לא מחבר אותה עם החשמל של התאורה הקיימת.
במילים אחרות זה כמו שאתה מושך כבל מאריך מהשקע לתאורה (לגבי עומס חשמל בד"כ אין בעיות עם זה).
גם כשיש לך תלת פאזה בבית אני מבין מהפוסטים לעיל שזה רק לאינדוקציה כך שמהבנה פשוטה אתה לא אמור לחבר בין 2 פאזות.
לפי מה שאני יודע אין שום בעיה ואאל"ט בקופסת גביס ניתן לשים גם 2 הזנות שונות של תלת פאזי
אם ראית מקום כזה תדע שזה לא תקני.
הסיבות שלא מערבים בין 2 מעגלים הם:
@יעקב2 אולי תנסה להסביר לי שיש הבדל בין הקופסא של גביס.... (לא נראה לי...).
אכן השקעים והתאורה הם במעגלים נפרדים, אך כאן אני מחבר כבל חדש לגוף תאורה חדש, והאם יש בעיה שהפיוז בלוח חשמל נותן כח גם לשקע וגם לתאורה החדשה?
אם אתה לא מערב בין 2 מעגלים אז אין בעיה.
ולגבי לעשות תאורה חדשה על שקע קיים זה אפשרי כי תאורה לא צורכת הרבה חשמל ובפרט לדים שהצריכה שלהם מזערית.
נראה מהשואל, שהוא רוצה את המתג לתאורה, בלי קשר לשקע, אז זה לא בעיה.
אבל שים לב שלרוב קופסא של מתג אין בה בכלל 0, מתג הוא רק ל 1 ("חיובי"), ולכן בקופסא בקיר של מתג לא תמיד פיזית אפשר לשים שקע, מאחר שאין שם 0 ("שלילי").
השואל כתב שיש לו שקע והוא רוצה להוסיף מתג.
@שוהם307 אכן כמו שכתב @יעקב2 שבמוצרים של גביס אפשר לעשות בקלות....
אמנם לא תמיד הכל תלוי איפה החיווט של התאורה עובר בד"כ צריך להשחיל את החיווט של התאורה מחדש.
הערה חשובה: זה לא תקני בכלל, היות ובדר"כ החיווט של השקעים והתאורה הם 2 מעגלים נפרדים בלוח חשמל, ולא שמים 2 מעגלי חשמל באותה הקופסא (זה עלול להיות מסוכן)
כשמפעילים את הקובץ