<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>James&#039; Tools and Tricks &#187; Windows</title>
	<atom:link href="http://jrudd.org/category/windows/feed/" rel="self" type="application/rss+xml" />
	<link>http://jrudd.org</link>
	<description>Tools, Tips and Hints for managing a network.</description>
	<lastBuildDate>Sun, 15 Apr 2012 12:59:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Acrobat X &#8211; Bulk Printing and Custom Header</title>
		<link>http://jrudd.org/2011/10/acrobat-x-bulk-printing-and-custom-header/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=acrobat-x-bulk-printing-and-custom-header</link>
		<comments>http://jrudd.org/2011/10/acrobat-x-bulk-printing-and-custom-header/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 05:14:48 +0000</pubDate>
		<dc:creator>James Rudd</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[action wizard]]></category>
		<category><![CDATA[Adobe Acrobat]]></category>
		<category><![CDATA[bulk PDF]]></category>
		<category><![CDATA[DET]]></category>
		<category><![CDATA[header]]></category>
		<category><![CDATA[pdfs]]></category>
		<category><![CDATA[Printing]]></category>

		<guid isPermaLink="false">http://jrudd.org/?p=273</guid>
		<description><![CDATA[Every year we need to print off hundreds of enrolment forms to verify details of new students and current students. Each of these forms is pre-filled with students details and there is a separate PDF for each student. Previously I &#8230; <a href="http://jrudd.org/2011/10/acrobat-x-bulk-printing-and-custom-header/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Every year we need to print off hundreds of enrolment forms to verify details of new students and current students. Each of these forms is pre-filled with students details and there is a separate PDF for each student.</p>
<p>Previously I used <a href="http://www.freewarefiles.com/Multiple-PDF-Printer_program_24346.html">Multiple PDF Printer</a> but this no longer works with Acrobat X. Instead I created an Action Wizard that allows you to select the folder with all the PDFs and it will print them all to your default printer with the default settings.</p>
<p>I then added another step to the action that uses Javascript to extract the student&#8217;s name from the file name and added it as a header to each page of that file. Finally this was modified so that the name is always on the outer edge, when it is printed back to back and stapled on the left.</p>
<p>To create this you can follow the following directions or import the attached action. Note: There is a file embedded within this post, please visit this post to download the file.</p>
<div id="attachment_282" class="wp-caption alignright" style="width: 310px"><a href="http://jrudd.org/wp-content/uploads/2011/10/Edit-Action.png" rel="lightbox[273]"><img class="size-medium wp-image-282" title="Acrobat X - Edit Action" src="http://jrudd.org/wp-content/uploads/2011/10/Edit-Action-300x188.png" alt="" width="300" height="188" /></a><p class="wp-caption-text">Acrobat X - Edit Action</p></div>
<p>In Acrobat X:</p>
<ol>
<li><strong>File</strong> -&gt; <strong>Action Wizard</strong> -&gt; <strong>Create New Action</strong></li>
<li>Click <strong>More Tools</strong> and then click <strong>Execute JavaScript</strong> and then click <strong>Print</strong>.</li>
<li>Change <strong>Start with</strong> to <strong>Ask when Action is Started</strong></li>
<li>Click on the Options button for JavaScript and paste in the following:</li>
</ol>
<pre class="brush: jscript; title: ; notranslate">
var strFilename = this.documentFileName;
// A regular expression to acquire the base name of the file
// Removes everything before last underscore for Ghosted_EnrolmentForm_
var re = /.*\/|.*_|\.pdf$/ig;
// Get student name by stripping path and everything to left of underscore
var strFilename = strFilename.replace(re,&quot;&quot;).replace(&quot;,&quot;,&quot;, &quot;);
var pageAmount = this.numPages; // Finds the length of the PDF

for (i = 0; i 	{
	if (i % 2 == 0) {
		// Odd
		this.addWatermarkFromText({
			cText: strFilename,
			nStart: i,
			nEnd: i,
			nFontSize: 11,
			nTextAlign: app.constants.align.right,
			nHorizAlign: app.constants.align.right,
			nVertAlign: app.constants.align.top,
			nHorizValue: -28, nVertValue: -10
		});
	}	else  {
		// Even
		this.addWatermarkFromText({
			cText: strFilename,
			nStart: i,
			nEnd: i,
			nFontSize: 11,
			nTextAlign: app.constants.align.left,
			nHorizAlign: app.constants.align.left,
			nVertAlign: app.constants.align.top,
			nHorizValue: 28, nVertValue: -10
		});
	}
}</pre>
<ol start="5">
<li>Click <strong>OK</strong>. Then click <strong>Save</strong>and type in a name for the action and a description.
<p><div id="attachment_291" class="wp-caption alignright" style="width: 160px"><a href="http://jrudd.org/wp-content/uploads/2011/10/Add-Files.png" rel="lightbox[273]"><img class="size-thumbnail wp-image-291" title="Add Files" src="http://jrudd.org/wp-content/uploads/2011/10/Add-Files-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Add Folders or Files</p></div></li>
<li>Set your default printer and printer settings to how you want your documents to print (e.g. Double sided, Stapled).</li>
<li><strong>File</strong> -&gt; <strong>Action Wizard</strong> -&gt; &lt;Your new action&gt;</li>
<li>Click <strong>Next</strong> on summary screen. You may tick <strong>Don&#8217;t show again</strong> box if you wish.</li>
<li>Click <strong>Add Files&#8230;</strong> drop down and choose<strong> Add Folders&#8230;</strong> and select the folder holding the PDFs.</li>
<li>Click <strong>Next</strong> and it will start adding the header and printing the files.</li>
</ol>
<h3>Useful Links:</h3>
<ul>
<li>Base for the JavaScript header is from Steve Wareham&#8217;s block post on <a href="http://www.stevewareham.com/pdfstamp.php">Adding a Dynamic Stamp to a PDF</a>.</li>
<li>The code to extract file name is from Adobe JavaScript Reference</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jrudd.org/2011/10/acrobat-x-bulk-printing-and-custom-header/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bulk Converting Global Groups to Universal and Mail Enabling</title>
		<link>http://jrudd.org/2011/07/bulk-converting-global-groups-to-universal-and-mail-enabling/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bulk-converting-global-groups-to-universal-and-mail-enabling</link>
		<comments>http://jrudd.org/2011/07/bulk-converting-global-groups-to-universal-and-mail-enabling/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 15:03:48 +0000</pubDate>
		<dc:creator>James Rudd</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Exchange]]></category>
		<category><![CDATA[distribution groups]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[exchange]]></category>
		<category><![CDATA[global address book]]></category>
		<category><![CDATA[global groups]]></category>
		<category><![CDATA[Microsoft Exchange Server]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[universal group]]></category>

		<guid isPermaLink="false">http://jrudd.org/?p=260</guid>
		<description><![CDATA[We have started trying to better organise our groups into a more role based system, so that membership of one group is based on a role rather than a person. That way if the person holding a position changes (holiday, &#8230; <a href="http://jrudd.org/2011/07/bulk-converting-global-groups-to-universal-and-mail-enabling/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We have started trying to better organise our groups into a more role based system, so that membership of one group is based on a role rather than a person. That way if the person holding a position changes (holiday, retirement, etc) we just make one change and the replacement user gets all the correct rights. e.g. &lt;user&gt; -&gt; HT Subject -&gt; Executive, rather than &lt;user&gt; -&gt; Executive.</p>
<p>The problem with this is when an email is sent to a mail enabled group, all the member groups of that group must be mail enabled for their members to receive the email. So I needed to bulk mail enable a container of groups, and also hide these new groups from the Address Book as they don&#8217;t need to be visible to staff.</p>
<p>Exchange 2010 only allows you to mail enable a group if it is a Universal group, and then only one at a time from the EMC. To convert all the Global groups in a particular container to universal groups, I used the following Power Shell command.</p>
<pre class="brush: powershell; title: ; notranslate">Import-Module ActiveDirectory
# List Tables
Get-ADGroup -SearchScope Subtree -SearchBase &quot;OU=StaffGroups,OU=Staff,DC=win&quot; -Filter {GroupCategory -eq &quot;Security&quot; -and GroupScope -eq &quot;Global&quot;}  | Format-Table

# Convert Global groups to Universal
Get-ADGroup -SearchScope Subtree -SearchBase &quot;&lt;code&gt;OU=StaffGroups,OU=Staff,DC=win&lt;/code&gt;&quot; -Filter {GroupCategory -eq &quot;Security&quot; -and GroupScope -eq &quot;Global&quot;}  | Set-ADGroup -GroupScope Universal</pre>
<p>Once converted to Universal groups I wanted to Enable the Groups as Distribution groups in Exchange and hide them from the global Address Book. These groups are role based and need to exist for group expansion in Exchange, but I don&#8217;t want them visible to everyone.</p>
<pre class="brush: powershell; title: ; notranslate">
# Load AD Modules
Import-Module ActiveDirectory

# Load Exchange Snapins
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
. $env:ExchangeInstallPath\bin\RemoteExchange.ps1
Connect-ExchangeServer -auto

# Get list of Groups not Mail Enabled
$b = Get-ADGroup -SearchScope Subtree -SearchBase &quot;OU=StaffGroups,OU=Staff,DC=win&quot; -Filter {GroupCategory -eq &quot;Security&quot; -and GroupScope -eq &quot;Universal&quot; -and mail -notlike &quot;*&quot;}

# Enable email for each group, use the Group name without spaces as Alias
$b | ForEach-Object { Enable-DistributionGroup -Identity $_.DistinguishedName -Alias ($_.Name -replace '\s|,|\.') }

# Hide the newly created groups from Global Address book
$b | ForEach-Object { Set-DistributionGroup -Identity $_.DistinguishedName -HiddenFromAddressListsEnabled $true}
 </pre>
<h3>Notes:</h3>
<ul>
<li>Details on replacing letters for alias is from <a title="Removing invalid characters for alias" href="http://www.powershellcommunity.org/Forums/tabid/54/aft/2852/Default.aspx" target="_blank">here</a>.</li>
<li><a title="Managing Exchange 2010 with Remote PowerShell" href="http://www.mikepfeiffer.net/2010/02/managing-exchange-2010-with-remote-powershell/" target="_blank">Mike Pfeiffer&#8217;s blog</a> had great instructions on how to load Exchange snap-ins into a normal PowerShell session, such as in ISE.</li>
<li>I found a few sites that mentioned using get-group instead of get-adgroup. Not sure why the wrong command is given. <a href="http://www.petri.co.il/forums/showthread.php?t=54431">Petri</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jrudd.org/2011/07/bulk-converting-global-groups-to-universal-and-mail-enabling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Encrypt Offline Files &#8211; Access Denied</title>
		<link>http://jrudd.org/2011/05/encrypt-offline-files-access-denied/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=encrypt-offline-files-access-denied</link>
		<comments>http://jrudd.org/2011/05/encrypt-offline-files-access-denied/#comments</comments>
		<pubDate>Wed, 18 May 2011 02:56:15 +0000</pubDate>
		<dc:creator>James Rudd</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[Encryption]]></category>
		<category><![CDATA[Group Policy]]></category>
		<category><![CDATA[laptop]]></category>
		<category><![CDATA[offline files]]></category>
		<category><![CDATA[recovery key]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sync]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://jrudd.org/?p=257</guid>
		<description><![CDATA[On a Windows 7 laptop I was trying to set up Offline Files with encryption enabled. After syncing the files and going into Manage Offline Files -&#62; Encryption -&#62; Encrypt everything seemed to go OK, but it would then keep &#8230; <a href="http://jrudd.org/2011/05/encrypt-offline-files-access-denied/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>On a Windows 7 laptop I was trying to set up Offline Files with encryption enabled. After syncing the files and going into Manage Offline Files -&gt; Encryption -&gt; Encrypt everything seemed to go OK, but it would then keep reporting Access Denied when it tried to sync any new files.<br />
After some searching I found this <a href="http://www.conetrix.com/Blog/post/Access-Denied-Error-Synchronizing-Encrypted-Offline-Files.aspx">post</a> which mentioned an expired Recovery Key in Group Policy. After checking the Group Policy object on the server I discovered there was an old Recovery Key stored in the EFS policy from when it was first set up. After regenerating the key and importing into policy, a gpupdate /force on laptop and reboot fixed the issue.</p>
]]></content:encoded>
			<wfw:commentRss>http://jrudd.org/2011/05/encrypt-offline-files-access-denied/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fuji-Xerox Network Scanning: Error 027-516</title>
		<link>http://jrudd.org/2011/04/fuji-xerox-network-scanning-error-027-516/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fuji-xerox-network-scanning-error-027-516</link>
		<comments>http://jrudd.org/2011/04/fuji-xerox-network-scanning-error-027-516/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 23:55:26 +0000</pubDate>
		<dc:creator>James Rudd</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[ApeosPort-II]]></category>
		<category><![CDATA[ApeosPort-III]]></category>
		<category><![CDATA[fuji xerox]]></category>
		<category><![CDATA[NetBIOS]]></category>
		<category><![CDATA[netbios over tcp ip]]></category>
		<category><![CDATA[Photocopier]]></category>
		<category><![CDATA[smb server]]></category>

		<guid isPermaLink="false">http://jrudd.org/?p=250</guid>
		<description><![CDATA[As part of a test for removing legacy protocols from the network I disabled NetBIOS over TCP/IP to see if any system would be adversely affected. After disabling NetBIOS for the server used by our Fuji-Xeros ApeosPort-II 4000 Photocopier, the &#8230; <a href="http://jrudd.org/2011/04/fuji-xerox-network-scanning-error-027-516/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As part of a test for removing legacy protocols from the network I disabled NetBIOS over TCP/IP to see if any system would be adversely affected.</p>
<div id="attachment_251" class="wp-caption alignleft" style="width: 310px"><a href="http://jrudd.org/wp-content/uploads/2011/04/DisableNetBIOS.png" rel="lightbox[250]"><img class="size-medium wp-image-251" title="Disable NetBIOS" src="http://jrudd.org/wp-content/uploads/2011/04/DisableNetBIOS-300x114.png" alt="" width="300" height="114" /></a><p class="wp-caption-text">Disabled NetBIOS</p></div>
<p>After disabling NetBIOS for the server used by our Fuji-Xeros ApeosPort-II 4000 Photocopier, the Network Scanning feature was unable to upload the scanned file to the SMB server. Instead it would return a 027-516 error code.</p>
<p>To verify the problem I Enabled NetBIOS and it immediately started working again.</p>
<p>I contacted Fuji-Xerox to check if they had a fix for the problem. I was advised that this can only be changed in newer versions, ApeosPort &gt;=3, and that is was considered a &#8220;Feature&#8221;. The only way for an AP-II device to work with a server with NetBIOS disabled is to use the FTP transmit method.</p>
<div id="attachment_252" class="wp-caption alignright" style="width: 310px"><a href="http://jrudd.org/wp-content/uploads/2011/04/AP3-MSNetwork.png" rel="lightbox[250]"><img class="size-medium wp-image-252 " title="AP3-MSNetwork" src="http://jrudd.org/wp-content/uploads/2011/04/AP3-MSNetwork-300x179.png" alt="" width="300" height="179" /></a><p class="wp-caption-text">AP-III NetBIOS Setting</p></div>
<p>After checking on one of our ApeosPort-III C3300, I found the page mentioned that allows the setting to be changed.</p>
<p>It appears that the use of NetBIOS by the APII is hardcoded and although it has DNS settings set, they are ignored for server name resolution. Considering this Photocopier is still being produced and sold I find it interesting that it relies on outdated protocols like NetBIOS. (ApeosPort-II 3000, 4000, 5010, 6000, 7000 are the main black and white photocopiers available to DET NSW Schools)</p>
]]></content:encoded>
			<wfw:commentRss>http://jrudd.org/2011/04/fuji-xerox-network-scanning-error-027-516/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Papercut</title>
		<link>http://jrudd.org/2010/08/papercut/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=papercut</link>
		<comments>http://jrudd.org/2010/08/papercut/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 23:11:23 +0000</pubDate>
		<dc:creator>James Rudd</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Novell]]></category>
		<category><![CDATA[Utilities]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Papercut]]></category>
		<category><![CDATA[Photocopier]]></category>
		<category><![CDATA[photocopiers]]></category>
		<category><![CDATA[Printer]]></category>
		<category><![CDATA[printer usage]]></category>
		<category><![CDATA[Printing]]></category>
		<category><![CDATA[student laptop]]></category>
		<category><![CDATA[Windows 2008]]></category>
		<category><![CDATA[Windows 2008 R2]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://jrudd.org/wordpress/?p=232</guid>
		<description><![CDATA[I have received a few questions asking about Papercut so here are some of the details about it and what we use it for. Papercut can run on a Windows Server (2003, 2008 or 2008 R2) using windows print queues &#8230; <a href="http://jrudd.org/2010/08/papercut/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://jrudd.org/wp-content/uploads/2010/08/Papercut1.png" rel="lightbox[232]"><img class="alignleft size-medium wp-image-242" title="Papercut Accounts" src="http://jrudd.org/wp-content/uploads/2010/08/Papercut1-294x300.png" alt="" width="294" height="300" /></a>I have received a few questions asking about <a href="http://www.papercut.com">Papercut</a> so here are some of the details about it and what we use it for.</p>
<p>Papercut can run on a Windows Server (2003, 2008 or 2008 R2) using windows print queues or a Novell Linux OES server with <a href="http://www.papercut.com/download/ng/#novell">iPrint</a> (CUPS &amp; SAMBA), it is written in Java with some wrappers for the OS in use.</p>
<p>We originally ran it on a Server 2003 R2 (x86) but have recently updated to a Windows 2008 R2 (x64)print server. The main reason for the upgrade was to provide up to date drivers for Windows 7 32 &amp; 64bit. We also run the <a href="http://www.papercut-mf.com">Papercut MF</a> version which costs A LOT more, but allows you to use it with external devices, such as photocopiers.</p>
<p>Papercut has some really useful features, <a href="http://www.papercut.com/tour/balance-recharge/top-up-cards/">Card recharge</a> allows you to generate top up cards and print them out yourself. Then you just cut them up and given them to the office (or canteen) to sell to the students. Makes recharging much easier and no need for office staff to login to an admin console to top up accounts.</p>
<p>We recently had a student laptop roll-out (NSW DER), these laptops are not on our domain so needed an alternative way to print. Papercut has a feature called <a href="http://www.papercut.com/tour/web-print/">WebPrint </a>which allows students to upload MS office or PDF files to a website and have them printed to the chosen printer. You need to run software for it on a windows pc (server or client) which automatically opens the document and prints it to the chosen printer. As our Print server is running Windows and is a virtual machine we just configured it to auto-login as a limited user we created and installed Office, and Acrobat.</p>
<p>We use the <a href="http://www.papercut.com/tour/reporting-in-detail/">reports</a> function for auditing staff accounts and charging printer usage back to faculties. Staff are automatically added to different charge accounts based on their AD group membership.</p>
<p>We have just started using Advanced Scripting to charge staff different prices than students on shared copiers and printers.<br />
The following script is what we use, as it is based on how faculties are invoiced at the end of each term. It is based on the Papercut recipe &#8220;Discount for staff&#8221; with a few changes.</p>
<pre class="brush: jscript; collapse: true; light: false; title: ; toolbar: true; notranslate">
/*
* Change Pricing for staff
*
* Staff are charged based on cost to school.
*
*/
function printJobHook(inputs, actions) {

var DISCOUNT_GROUP   = &quot;Staff-All&quot;;
var COST_COLOUR  = 0.07; // Click Rate of Colour
var COST_BW  = 0.02;  // Click Rate of B/W
var COST_A4  = 0.01;  // Price per page of A4
var COST_A3  = 0.03;  // Price per page of A3

/*
* This print hook will need access to all job details
* so return if full job analysis is not yet complete.
* The only job details that are available before analysis
* are metadata such as username, printer name, and date.
*
* See reference documentation for full explanation.
*/

if (!inputs.job.isAnalysisComplete) {
	// No job details yet so return.
	return;
}

if (inputs.user.isInGroup(DISCOUNT_GROUP)) {
	// Debug messages are written to [install-path]/server/logs/server.log
	actions.log.debug(&quot;Cost before discount: &quot; + inputs.job.cost);

	// Initial 0
	var newCost = 0;

	// Includes Duplex
	if (inputs.job.paperSizeName == &quot;A4&quot;) {
		newCost = inputs.job.totalSheets * COST_A4;
	}
	else {
		newCost = inputs.job.totalSheets * COST_A3 ;
	}

	newCost += inputs.job.totalGrayscalePages * COST_BW;
	newCost += inputs.job.totalColorPages * COST_COLOUR;

	 actions.job.setCost(newCost);

	actions.log.debug(&quot;Staff Pricing on &quot; + inputs.job.printerName + &quot; For &quot; + inputs.job.totalSheets +
		&quot; sheets had &quot; + inputs.job.totalGrayscalePages + &quot; B/W &amp; &quot; +
		inputs.job.totalColorPages + &quot; Colour, Cost after discount: &quot; + newCost);

	// Record that as discount was applied in the job comment.
	actions.job.addComment(&quot;Staff Pricing applied. Had &quot; + inputs.job.totalGrayscalePages + &quot; B/W &amp; &quot; +
	inputs.job.totalColorPages + &quot; Colour&quot;);
	}
}
</pre>
<p>Other useful features:</p>
<ul>
<li>Students and staff see a summary of how many pages they are going to print, which helps reduce accidental printing of entire chapters of text instead of just a few pages.</li>
<li>Logs and statistics show which printers are getting used, how much is getting printed, and who printed the document but didn&#8217;t collect it.</li>
<li>Great support. I have contacted them over a number of issues and they have always gotten back quickly with good ideas, or have added features in later versions.</li>
</ul>
<p>Downsides:</p>
<ul>
<li>Although the price for education version of <a href="http://www.papercut.com/pricing/education/">Papercut NG </a>is not too bad, to get the MF version which supports copiers it costs around twice as much. Also you then need cost recovery devices for the copiers ~AUD$1,800 each, and there are annual support and maintenance costs ~AUD$1,000/year.</li>
</ul>
<p>If you want to get an idea of how much printing your staff and students or just want to keep a record of who is printing what (like you could do easily with iPrint)  try the free <a href="http://www.papercut.com/products/free_software/print_logger/">Papercut Print Logger</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jrudd.org/2010/08/papercut/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pre-populate Users names and email address in Office and Acrobat</title>
		<link>http://jrudd.org/2010/07/pre-populate-users-names-and-email-address-in-office-and-acrobat/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pre-populate-users-names-and-email-address-in-office-and-acrobat</link>
		<comments>http://jrudd.org/2010/07/pre-populate-users-names-and-email-address-in-office-and-acrobat/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 07:01:58 +0000</pubDate>
		<dc:creator>James Rudd</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Adobe Acrobat]]></category>
		<category><![CDATA[adobe acrobat reader]]></category>
		<category><![CDATA[Microsoft Office]]></category>
		<category><![CDATA[simple vbscript]]></category>
		<category><![CDATA[vbscript]]></category>
		<category><![CDATA[Windows Registry]]></category>

		<guid isPermaLink="false">http://jrudd.org/wordpress/?p=211</guid>
		<description><![CDATA[Often you would like some personal information filled in for the user before they start the application. E.g. Why have Office or Acrobat ask for the users name when it is already stored in active directory? Here are some simple &#8230; <a href="http://jrudd.org/2010/07/pre-populate-users-names-and-email-address-in-office-and-acrobat/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Often you would like some personal information filled in for the user before they start the application. E.g. Why have Office or Acrobat ask for the users name when it is already stored in active directory?</p>
<p>Here are some simple VBScripts that can be added to a log on script or similar to pre-fill these for the user. Once you know the registry location where the identity information is  stored it is quite easy to fill those values as part of a login script.</p>
<h3>Microsoft Office</h3>
<pre class="brush: vb; title: ; notranslate">' Original MS Office script written by David Isaacs
Set oShell = CreateObject(&quot;WScript.Shell&quot;)

On Error Resume Next

strUsername = oShell.ExpandEnvironmentStrings(&quot;%USERNAME%&quot;)
strUserdomain = oShell.ExpandEnvironmentStrings(&quot;%USERDOMAIN%&quot;)

Set oUser = GetObject(&quot;WinNT://&quot; &amp; strUserdomain &amp; &quot;/&quot; &amp; strUsername &amp; &quot;,user&quot;)

oShell.RegWrite &quot;HKCU\Software\Microsoft\Office\Common\UserInfo\UserInitials&quot;, strUsername
oShell.RegWrite &quot;HKCU\Software\Microsoft\Office\Common\UserInfo\UserName&quot;, oUser.Fullname</pre>
<h3>Adobe Acrobat Pro and Reader</h3>
<p>This will set the full name, office, email address and your company for multiple versions of Acrobat and Acrobat reader. You can add even more versions by adding extra lines to the array.</p>
<p>Also if you modified Acrobat to install with Acrobat.com disabled, but  now wish to enable it this will enable it. We originally had it disabled, but found email and network form  submission did not work properly until it was enabled.</p>
<p>The method for accessing the AD User object was posted by Mike Walker in this <a href="http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/d2d9bf23-e27f-4f30-9199-42833d6919a4">thread</a>.</p>
<pre class="brush: vb; title: ; notranslate">' Configure Adobe Acrobat default settings
' Written by James Rudd
Set oShell = CreateObject(&quot;WScript.Shell&quot;)
Set oFso = CreateObject(&quot;Scripting.FileSystemObject&quot;)

' Set the different registry paths for Acrobat
Dim regPaths(2)
regPaths(0) = &quot;HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat\9.0\&quot;  'For Acrobat Pro 9
regPaths(1) = &quot;HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\9.0\&quot;  'For Acrobat Reader 9
regPaths(2) = &quot;HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\8.0\&quot;  'Same for Acrobat Reader 8

On Error Resume Next

' Create the ADSystem Information Object
Set objADSystemInfo = CreateObject(&quot;ADSystemInfo&quot;)
' Get the current information into a new Object
Set objUser = GetObject(&quot;LDAP://&quot; &amp; objADSystemInfo.UserName)

For Each regPath In regPaths
 'Enable Acrobat.com by deleting key that contains disabling entries.
 oShell.regdelete regPath &amp; &quot;Workflows\&quot;

 'Set Acrobat Identity Info
 oShell.RegWrite regPath &amp; &quot;Identity\tEMail&quot;, objUser.mail, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;Identity\tName&quot;, objUser.givenName &amp; &quot; &quot; &amp; objUser.sn, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;Identity\tFirstName&quot;, objUser.givenName, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;Identity\tLastName&quot;, objUser.sn, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;Identity\tCorporation&quot;, &quot;Your Company Name&quot;, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;Identity\tDepartment&quot;, objUser.physicalDeliveryOfficeName, &quot;REG_SZ&quot;

 'Set Default Acrobat Collaboration details
 oShell.RegWrite regPath &amp; &quot;ShareIdentity\tEMail&quot;, objUser.mail, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;ShareIdentity\tFullName&quot;, objUser.givenName &amp; &quot; &quot; &amp; objUser.sn, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;ShareIdentity\tCorporation&quot;, &quot;Your Company Name&quot;, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;ShareIdentity\tDepartment&quot;, objUser.physicalDeliveryOfficeName, &quot;REG_SZ&quot;
Next
</pre>
<h3>Combined</h3>
<p>The following script combines both Office and Acrobat data in to one, and reuses the same data objects rather than use two different connection techniques.</p>
<pre class="brush: vb; title: ; notranslate">
' Configure Adobe Acrobat and MS Office user settings
' Written by James Rudd

Const strCompanyName = &quot;Your School Name&quot;

Set oShell = CreateObject(&quot;WScript.Shell&quot;)
Set oFso = CreateObject(&quot;Scripting.FileSystemObject&quot;)

' Create the ADSystem Information Object
Set objADSystemInfo = CreateObject(&quot;ADSystemInfo&quot;)
' Get the current information into a new Object
Set objUser = GetObject(&quot;LDAP://&quot; &amp; objADSystemInfo.UserName)

On Error Resume Next

'Office Details
oShell.RegWrite &quot;HKCU\Software\Microsoft\Office\Common\UserInfo\UserInitials&quot;, objUser.sAMAccountName, &quot;REG_SZ&quot;
oShell.RegWrite &quot;HKCU\Software\Microsoft\Office\Common\UserInfo\UserName&quot;, objUser.givenName &amp; &quot; &quot; &amp; objUser.sn, &quot;REG_SZ&quot;
' If set by installer Company Name is overidden on load.
oShell.RegWrite &quot;HKCU\Software\Microsoft\Office\Common\UserInfo\Company&quot;, strCompanyName, &quot;REG_SZ&quot;

' Set the different registry paths for Acrobat
Dim regPaths(2)
regPaths(0) = &quot;HKEY_CURRENT_USER\Software\Adobe\Adobe Acrobat\9.0\&quot;  'For Acrobat Pro 9
regPaths(1) = &quot;HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\9.0\&quot;  'For Acrobat Reader 9
regPaths(2) = &quot;HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\8.0\&quot;  'Same for Acrobat Reader 8

For Each regPath In regPaths
 'Enable Acrobat.com by deleting key that contains disabling entries.
 oShell.regdelete regPath &amp; &quot;Workflows\&quot;

 'Set Acrobat Identity Info
 oShell.RegWrite regPath &amp; &quot;Identity\tEMail&quot;, objUser.mail, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;Identity\tName&quot;, objUser.givenName &amp; &quot; &quot; &amp; objUser.sn, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;Identity\tFirstName&quot;, objUser.givenName, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;Identity\tLastName&quot;, objUser.sn, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;Identity\tCorporation&quot;, &quot;Your Company Name&quot;, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;Identity\tDepartment&quot;, objUser.physicalDeliveryOfficeName, &quot;REG_SZ&quot;

 'Set Default Acrobat Collaboration details
 oShell.RegWrite regPath &amp; &quot;ShareIdentity\tEMail&quot;, objUser.mail, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;ShareIdentity\tFullName&quot;, objUser.givenName &amp; &quot; &quot; &amp; objUser.sn, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;ShareIdentity\tCorporation&quot;, strCompanyName, &quot;REG_SZ&quot;
 oShell.RegWrite regPath &amp; &quot;ShareIdentity\tDepartment&quot;, objUser.physicalDeliveryOfficeName, &quot;REG_SZ&quot;
Next
</pre>
]]></content:encoded>
			<wfw:commentRss>http://jrudd.org/2010/07/pre-populate-users-names-and-email-address-in-office-and-acrobat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using BackupPC with DiskShadow to backup open files</title>
		<link>http://jrudd.org/2010/07/using-backuppc-with-diskshadow-to-backup-open-files/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=using-backuppc-with-diskshadow-to-backup-open-files</link>
		<comments>http://jrudd.org/2010/07/using-backuppc-with-diskshadow-to-backup-open-files/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 14:59:48 +0000</pubDate>
		<dc:creator>James Rudd</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Utilities]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Administrator]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[backuppc]]></category>
		<category><![CDATA[Cygwin]]></category>
		<category><![CDATA[DiskShadow]]></category>
		<category><![CDATA[noacl]]></category>
		<category><![CDATA[openssh]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[server 2008 R2]]></category>
		<category><![CDATA[snapshots]]></category>
		<category><![CDATA[Task Scheduler]]></category>
		<category><![CDATA[VShadow]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://jrudd.org/wordpress/?p=151</guid>
		<description><![CDATA[This post is to assist in the setup of a BackupPC system able to backup in use files by using MS volume snapshots. It also has the benefit of only having the RSync daemon running during the backup which increases security. <a href="http://jrudd.org/2010/07/using-backuppc-with-diskshadow-to-backup-open-files/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<h1>Introduction</h1>
<p>This post is to assist in the setup of a BackupPC system able to  backup in use files by using MS volume snapshots. It also has the  benefit of only having the RSync daemon running during the backup which  increases security.</p>
<p>This method is based on some other posts I  have seen using <a href="http://www.goodjobsucking.com/?p=62">VShadow</a>, <a href="http://www.goodjobsucking.com/?p=62"><em>Backing Up Open Files on Windows with Rsync</em></a>, and some  suggestions on <a href="http://www.goodjobsucking.com/?p=62&amp;cpage=2#comment-3159">DiskShadow</a> but goes further in using RSync as a system service giving full access  to files, and removing the need to use winexe.</p>
<h2>General Outline</h2>
<ol>
<li>Create a new user <em><strong>backuppc </strong></em>(try to match case of the user on Linux). Very limited rights</li>
<li>Install Cygwin with RSync, OpenSSH and configure them</li>
<li>Create a scheduled task to run as SYSTEM when triggered by a certain event</li>
<li>Set BackupPC server for passwordless login to host and modify Pre/Post Dump Cmds</li>
</ol>

<h1>Overview</h1>
<p>In Windows 7 and Server 2008 R2 elevation is required to create snapshots. As a remote SSH connection cannot bypass UAC a way is needed to create the snapshot, bypassing the elevation prompt. I also wished to run the Rsync Daemon as SYSTEM user so it has rights to view all files.</p>
<p>To do this I moved all the elevated tasks into a Task Scheduler item that is set to run as SYSTEM, and is triggered by an Event log event.</p>
<ol>
<li>BackupPC performs a password-less key SSH logon to client</li>
<li>It runs a script which creates an event log entry and then waits for RSync to start before returning to BackupPC and starting the backup.</li>
<li>Task scheduler is triggered by <a href="http://support.microsoft.com/kb/315410">Event Log</a> and starts DiskShadow as SYSTEM.</li>
<li>Disk shadow creates a shadow of any chosen volumes, mounts them and then starts RSync.<br />
It then waits for a file to be created by BackupPC at the end of the backup telling it to stop RSync and delete the snaphots.</li>
</ol>
<h3>Flow and triggers</h3>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="205" valign="top"><strong>BackupPC Server</strong></td>
<td colspan="2" width="411" valign="top"><strong>Host PC</strong></td>
</tr>
<tr>
<td width="205" valign="top"><strong>backuppc User</strong></td>
<td width="205" valign="top"><strong>backuppc User</strong></td>
<td width="205" valign="top"><strong>SYSTEM</strong></td>
</tr>
<tr>
<td style="text-align: center;" colspan="3" width="411" valign="top"><strong>Start Backup</strong></td>
</tr>
<tr>
<td width="205" valign="top">SSH to Host PC</td>
<td width="205" valign="top"></td>
<td width="205" valign="top"></td>
</tr>
<tr>
<td width="205" valign="top"></td>
<td width="205" valign="top">Log Event</td>
<td width="205" valign="top">Diskshadow: Snaphsot</td>
</tr>
<tr>
<td width="205" valign="top"></td>
<td width="205" valign="top"></td>
<td width="205" valign="top">Start Rsync</td>
</tr>
<tr>
<td width="205" valign="top"></td>
<td width="205" valign="top">Close and return</td>
<td width="205" valign="top"></td>
</tr>
<tr>
<td width="205" valign="top">Begin Backup</td>
<td width="205" valign="top"></td>
<td width="205" valign="top"></td>
</tr>
<tr>
<td style="text-align: center;" colspan="3" width="411" valign="top"><strong>Finish Backup</strong></td>
</tr>
<tr>
<td width="205" valign="top">SSH to Host PC</td>
<td width="205" valign="top"></td>
<td width="205" valign="top"></td>
</tr>
<tr>
<td width="205" valign="top"></td>
<td width="205" valign="top">Create a Wake.up file</td>
<td width="205" valign="top"></td>
</tr>
<tr>
<td width="205" valign="top"></td>
<td width="205" valign="top"></td>
<td width="205" valign="top">Stop Rsync</td>
</tr>
<tr>
<td width="205" valign="top"></td>
<td width="205" valign="top"></td>
<td width="205" valign="top">Delete Snaphost</td>
</tr>
</tbody>
</table>
<h1>Host PC</h1>
<p>Create a new user, <em><strong>backuppc</strong></em>, you can limit this account further in Security policy after everything is configured.</p>
<p>Create a BackupPC folder and add the following scripts to it. These are also available in a <a href="http://jrudd.org//download/general/BackupPC-Config.zip">zip file</a>. Note: There is a file embedded within this post, please visit this post to download the file. You will need to modify paths depending on where you create the folder. I used C:\cygwin\BackupPC but a better location may be C:\cygwin\usr\share\BackupPC</p>
<p>Most of these scripts are just modified versions of the ones written for <a href="http://www.goodjobsucking.com/?p=62">VShadow</a>, changed to work with DiskShadow and Task Scheduler.</p>
<p><strong>pre-cmd.vbs</strong></p>
<pre class="brush: vb; collapse: true; light: false; title: ; toolbar: true; notranslate">' This file starts the commands
' It will start the snapshot process and quite once RSync is running

Const Rsync = &quot;C:\cygwin\var\run\rsyncd.pid&quot;
Const Flag = &quot;C:\cygwin\var\run\wake.up&quot;
Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
'
' Pid file shouldn't be there already
' Check /stop service , still there delete
'
If DoesFileExist(Rsync)=0 Then
	fso.DeleteFile(Rsync)
End If
'
' Nor should &quot;wake.up&quot;
'
If DoesFileExist(Flag)=0 Then
   fso.DeleteFile(Flag)
End If

Set objShell = CreateObject(&quot;WScript.Shell&quot;)
' objShell.Exec &quot;C:\BackupPC\backuppc.cmd &gt; &quot; &amp; Log

' This writes event log entry that triggers task scheduler to start system process
' that takes snapshot and starts RSync
objShell.Exec &quot;Logevent.exe -r &quot;&quot;BackupPC&quot;&quot; -e 10 -s S &quot;&quot;Backup Start&quot;&quot; &quot;
Wscript.Echo &quot;Sent BackupPC Event Log Trigger&quot;

'
' Just sleep until the file &quot;rsyncd.pid&quot; appears
'

While DoesFileExist(Rsync)
   wscript.sleep 10000
Wend

' functions

function DoesFileExist(FilePath)
Dim fso
	Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
	if not fso.FileExists(FilePath) then
		DoesFileExist = -1
	else
		DoesFileExist = 0
	end if
	Set fso = Nothing

end function</pre>
<p><strong>backuppc.cmd</strong></p>
<pre class="brush: plain; collapse: true; light: false; title: ; toolbar: true; notranslate">c:
cd C:\cygwin\BackupPC
diskshadow /s DiskShadowScript.txt /l C:\cygwin\var\log\diskshadow.log
del C:\cygwin\var\tmp\*.cab /q
c:cd C:\cygwin\BackupPCdiskshadow /s DiskShadowScript.txt /l C:\cygwin\var\log\diskshadow.log
del C:\cygwin\var\tmp\*.cab /q</pre>
<p><strong>DiskShadowScript.txt</strong></p>
<pre class="brush: plain; collapse: true; light: false; title: ; toolbar: true; notranslate">#DiskShadow script file

#Make shadows persistent, No writers as data volume

# If backing up C: and any app files (ntds, database, etc) use writers

#SET CONTEXT PERSISTENT NOWRITERS

SET CONTEXT PERSISTENT

#Cab location for process

SET METADATA C:\cygwin\var\tmp\backup.cab

SET VERBOSE ON

BEGIN BACKUP

#Alias volume with alias

ADD VOLUME C: ALIAS SystemData

ADD VOLUME F: ALIAS UserData

#Create Snapshot

CREATE

#Expose the volume and run command file then unexpose

EXPOSE %UserData% B:

EXPOSE %SystemData% T:

EXEC C:\cygwin\BackupPC\Serverbackup.cmd

UNEXPOSE B:

UNEXPOSE T:

END BACKUP

#Delete the shadow copy

DELETE SHADOWS SET %VSS_SHADOW_SET%

#End of script</pre>
<p><strong>Serverbackup.cmd</strong></p>
<pre class="brush: plain; collapse: true; light: false; title: ; toolbar: true; notranslate">REM Start RSync now that Snapshots are created

net start rsyncd

REM Need to wait until backup completed

cscript &quot;C:\cygwin\BackupPC\sleep.vbs&quot;

Logevent.exe -r &quot;BackupPC&quot; -e 20 -s S &quot;Backup Completed&quot;
</pre>
<p><strong>sleep.vbs</strong></p>
<pre class="brush: vb; collapse: true; light: false; title: ; toolbar: true; notranslate">Const Rsync = &quot;C:\cygwin\var\run\rsyncd.pid&quot;
Const Flag = &quot;C:\cygwin\var\run\wake.up&quot;
Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)

' Just sleep until the file &quot;rsyncd.pid&quot; appears
While DoesFileExist(Rsync)
   wscript.sleep 10000
Wend

' Now sleep until the file &quot;wake.up&quot; appears
While DoesFileExist(Flag)
   wscript.sleep 10000
Wend

fso.DeleteFile(Flag)

' It's time to kill Rsync
'Stop Service
strServiceName = &quot;rsyncd&quot;
Set objWMIService = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2&quot;)
Set colListOfServices = objWMIService.ExecQuery(&quot;Select * from Win32_Service Where Name ='&quot; &amp; strServiceName &amp; &quot;'&quot;)
For Each objService in colListOfServices
    objService.StopService()
	Wscript.Echo &quot;RSyncD Stopped&quot;
Next

' Wait for Rsync to let go
wscript.sleep 5000

' Delete PID file
If DoesFileExist(Rsync)=0 Then
   fso.DeleteFile(Rsync)
End If

' functions
function DoesFileExist(FilePath)
Dim fso
	Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
	if not fso.FileExists(FilePath) then
		DoesFileExist = -1
	else
		DoesFileExist = 0
	end if
	Set fso = Nothing

end function
</pre>
<h2>Cygwin</h2>
<p>Install Cygwin and choose to install packages RSync and OpenSSH</p>
<p>Start an elevated Cygwin (Run as an Administrator )</p>
<h4>Config</h4>
<p>Cygwin 1.7 changes the way to ignore NT Security from the <em>nontsec </em>environment to modifying fstab file.</p>
<p>In your prefered editor modify /etc/fstab and uncomment the bottom line and add <em>noacl </em>as below, this tells it to ignore security :</p>
<pre class="brush: plain; light: true; title: ; notranslate">none /cygdrive cygdrive binary,noacl,posix=0,user 0 0</pre>
<p>Run following to update group and user lists (if on a domain only add the users you want)</p>
<p>[bashlight=1]mkpasswd –l >/etc/passwd<br />
mkgroup –l /etc/group[/bash]</p>
<h3>OpenSSH</h3>
<p>Configure Open SSH using <em>ssh-host-config</em>, create both the accounts it suggests for privilege isolation and running the service (cyg_service &amp; sshd).<br />
This should also automatically add the Firewall Exceptions (SSHD).</p>
<h4>Setting up Keyless</h4>
<p><span style="font-weight: normal;">Login as backuppc user.</span><br />
<span style="font-weight: normal;"> </span><span style="font-weight: normal;">Use </span></p>
<pre class="brush: plain; light: true; title: ; notranslate">runas /user:backuppc cmd</pre>
<p>Or</p>
<pre class="brush: plain; light: true; title: ; notranslate">runas /user:domain\backuppc cmd</pre>
<p>Run c:\cygwin\Cygwin.bat to start Cygwin as BackupPC user</p>
<p>You need to add the id_rsa.pub file from the BackupPC user on BackupPC server to C:\cygwin\home\backuppc\.ssh\authorized_keys If you have not already created one follow the instructions below in BackupPC &#8211; SSH section.</p>
<h3>RSync</h3>
<p>To install RSync as a system service use:</p>
<pre class="brush: plain; title: ; notranslate">C:\cygwin\bin\cygrunsrv.exe -I rsyncd -d &quot;RSync Daemon&quot; -O --type manual -p /bin/rsync.exe -f &quot;Used by BackupPC to remotely access files for backup&quot; -a &quot; --config=/etc/rsyncd.conf --daemon --no-detach&quot;</pre>
<p>Modify the /etc/rsyncd.conf file to reflect what drives you want to backup. It is better to edit this file later after you have modified the DiskShadowScript.txt and changed which drive letter it exposes shadows as.</p>
<p>Add a RSync exception to the firewall.</p>
<p>Open <em>Windows Firewall with Advanced Security</em> and choose Inbound Rules, New Rule, Program,  Next</p>
<p>Browse to C:\cygwin\bin\rsync.exe and then choose your options and name the rule</p>
<p>When finished open the rule, click Scope tab and add a Remote IP, that of the BackupPC server. This restricts RSync to only be accessible from BackupPC. You may also wish to similarly modify SSHD to only allow SSH access from BackupPC server.</p>
<h2>DiskShadow</h2>
<p>If you are backing up a windows Server 2008 or 2008 R2 host you already have DiskShadow installed. However, if you are running Windows 7 or Vista you will need to grab a copy from an equivalent server (x86 or x64). It is located in the System32 directory and you will also need the language file from the en-US folder.</p>
<p>I have <a href="http://jrudd.org//download/utilities/DiskShadow.zip">zipped the files needed</a> for x86 and x64 if you do not have immediate access to a Server.Note: There is a file embedded within this post, please visit this post to download the file. (The x86 files are from Server 2008 and x64 are from 2008 R2)</p>
<p>Copy the files from your architecture to the system32 directory and en-US subdirectory.</p>
<h3>LogEvent</h3>
<p>To generate the custom event log entry a tool from the Windows 2000 Resource kit is used, <a href="http://support.microsoft.com/kb/315410">LogEvent</a>, (<a href="http://www.dynawell.com/download/reskit/microsoft/win2000/logevent.zip">Download</a>). This needs to be either placed in the Path (e.g. Windows dir) or scripts need to directly call it.</p>
<h2>Task Scheduler</h2>
<p>The easiest way to configure this is to manually run LogEvent once to generate an event in the log.</p>
<pre class="brush: plain; light: true; title: ; notranslate">Logevent.exe -r &quot;BackupPC&quot; -e 10 -s S &quot;Backup Start&quot;</pre>
<p>Then open Event Viewer, Select the new BackupPC event and choose <em>Attach Task to this Event</em>, and in the wizard click next until it asks for the program, then give it <strong>C:\cygwin\BackupPC\backuppc.cmd</strong></p>
<p>On Final page choose to <em>Open Properties</em> when you click Finish</p>
<p>Click the <em>Change User or Group</em> button and type in <strong>System </strong>as the user  and click OK. Also tick the <em>Run with highest privileges</em> box</p>
<h1>BackupPC Server</h1>
<h2>SSH</h2>
<p>This section is only needed if you do not already have keys generated for the backuppc user.</p>
<p>Login as backuppc user, either with password or simply “su – backuppc” from root</p>
<p>Generate SSH Keys, <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"><em>ssh-keygen –t rsa</em></span>, do not set a password. Copy id_rsa.pub into C:\cygwin\home\backuppc\.ssh \authorized_keys</p>
<p>Test by running <em>ssh -v backuppc@host</em> to test the connection</p>
<h2>BackupPC Host File</h2>
<p>In the web interface change the following for the host.</p>
<pre class="brush: plain; light: true; title: ; notranslate">DumpPreUserCmd:  $sshPath -q -x -l backuppc $host cscript &quot;C:\cygwin\BackupPC\pre-cmd.vbs&quot;
 DumpPostUserCmd: $sshPath -q -x -l backuppc $host echo &quot;Complete: $xferOK&quot; &gt; /var/run/wake.up</pre>
<h2>Test Run</h2>
<p>If you have existing backups from a previous RSync config, it is a good idea to run a full backup to ensure any in use files are part of the base. In my case I also changed the <em>noacl </em>flag which affected the file attributes RSync sees.</p>
<h1>Tips</h1>
<p>Set your antivirus to exclude the exposed drives. As they are read only it just slows down the reading of files by RSync.</p>
<h3>Downloads</h3>
Note: There is a file embedded within this post, please visit this post to download the file.
<h1>Updates</h1>
<ul>
<li>While writing this up I found a good alternative way of using VShadow with SSH to backup in use files, that uses the AT command instead of task scheduler to get around UAC, <a href="http://geraldbrandt.com/2010/06/08/backuppc-with-sshrsyncvss-on-windows-server/">BackupPC with ssh/rsync/VSS on Windows Server</a>. The only down side to this method is the SSH connection requires an Admin account, but if configured securely this should be fine. It also a lot simpler to configure as it does not require configuring Task Scheduler.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jrudd.org/2010/07/using-backuppc-with-diskshadow-to-backup-open-files/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>HP Printers &#8211; &#8220;Printer driver is not installed&#8221; on Windows 2008 R2</title>
		<link>http://jrudd.org/2010/05/hp-printers-printer-driver-is-not-installed-on-windows-2008-r2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hp-printers-printer-driver-is-not-installed-on-windows-2008-r2</link>
		<comments>http://jrudd.org/2010/05/hp-printers-printer-driver-is-not-installed-on-windows-2008-r2/#comments</comments>
		<pubDate>Mon, 17 May 2010 00:59:05 +0000</pubDate>
		<dc:creator>James Rudd</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[Bulk Operations]]></category>
		<category><![CDATA[hp printers]]></category>
		<category><![CDATA[HPTrayCount]]></category>
		<category><![CDATA[microsoft windows]]></category>
		<category><![CDATA[print management]]></category>
		<category><![CDATA[print servers]]></category>
		<category><![CDATA[printer driver]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[server 2008 R2]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[vbscript]]></category>

		<guid isPermaLink="false">http://jrudd.org/wordpress/?p=134</guid>
		<description><![CDATA[Recently I migrated all our printers from a Server 2003 R2 x32 print server to Server 2008 R2 (x64). During this upgrade all the printers had x64 drivers added and their security settings checked. However, I kept experiencing problems in &#8230; <a href="http://jrudd.org/2010/05/hp-printers-printer-driver-is-not-installed-on-windows-2008-r2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Recently I <a href="http://trycatch.be/blogs/roggenk/archive/2008/05/13/windows-server-2008-printer-migration-and-consolidation.aspx">migrated all our printers</a> from a <a href="http://xmstechnology.glve.be/archives/41">Server 2003 R2 x32 print server to Server 2008 R2 (x64)</a>. During this upgrade all the printers had x64 drivers added and their security settings checked. However, I kept experiencing problems in Print Management with the HP printers reporting the <em>Printer driver is not installed</em>, even after it had been repeatedly added and appeared in list of installed drivers.</p>
<p>Finally I found a <a href="http://social.technet.microsoft.com/Forums/en/winserverprint/thread/5101195b-3aca-4699-9a06-db4578614e2d">Technet discussion</a> on the issue, which correctly identified an incorrect registry value <em>HPTrayCount </em>which is set to 0 when the printer driver is changed, but is not set back to a working value.</p>
<p>This value needs to be changed to 0&#215;12 (decimal 18) for each HP printer for it to work correctly. However, on print servers with lots of HP printers this can be very time consuming. To speed this process I have written the vbscript below which will check if the value exists for each printer, and if it is set to 0 will set it to 0&#215;12.</p>
<pre class="brush: vb; title: ; notranslate">
' For each Printer in Registry check if HPTrayCount exists and is set to 0, then set to 12

'http://social.technet.microsoft.com/Forums/en/winserverprint/thread/5101195b-3aca-4699-9a06-db4578614e2d

strKeyPath = &quot;SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers&quot;
strValueName = &quot;HPTrayCount&quot;
inHPValue = 18 ' Is equal to Hex 12, makesprinter driver work.

'http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/registry/#EnumRegVals.htm
const HKEY_LOCAL_MACHINE = &amp;H80000002
strComputer = &quot;.&quot;
Set StdOut = WScript.StdOut

Set oReg=GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\&quot; &amp; _
strComputer &amp; &quot;\root\default:StdRegProv&quot;)

' Get list of Printers
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
  ' Read in HP Tray value
  strPrintPath = strKeyPath &amp; &quot;\&quot; &amp; subkey &amp; &quot;\PrinterDriverData&quot;
  oReg.GetDWORDValue HKEY_LOCAL_MACHINE,strPrintPath,strValueName,dwValue
  If Not IsNull (dwValue) And dwValue = 0 Then
    'If Exists and 0 then set it to a real value to make it work
    StdOut.WriteLine subkey &amp; &quot;: HP Tray: &quot; &amp; dwValue
    oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strPrintPath,strValueName,inHPValue
  End If
Next
</pre>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 620px; width: 1px; height: 1px; overflow: hidden;">
<pre></pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://jrudd.org/2010/05/hp-printers-printer-driver-is-not-installed-on-windows-2008-r2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Server 2008 R2 and Windows Mail</title>
		<link>http://jrudd.org/2010/02/windows-server-2008-r2-and-windows-mail/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=windows-server-2008-r2-and-windows-mail</link>
		<comments>http://jrudd.org/2010/02/windows-server-2008-r2-and-windows-mail/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 03:35:47 +0000</pubDate>
		<dc:creator>James Rudd</dc:creator>
				<category><![CDATA[Utilities]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[autoruns]]></category>
		<category><![CDATA[server 2008 R2]]></category>
		<category><![CDATA[SysInternals]]></category>
		<category><![CDATA[terminal server]]></category>

		<guid isPermaLink="false">http://jrudd.org/wordpress/?p=126</guid>
		<description><![CDATA[I have just been setting up a new Windows Server 2008 R2 box up as a terminal server. As part of this I enabled the Desktop Experience feature, however this also enabled Windows Mail. Windows mail seems to generate large &#8230; <a href="http://jrudd.org/2010/02/windows-server-2008-r2-and-windows-mail/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I have just been setting up a new Windows Server 2008 R2 box up as a terminal server. As part of this I enabled the Desktop Experience feature, however this also enabled Windows Mail.</p>
<p>Windows mail seems to generate large amounts of ESENT messages in the log file as it tries to backup the mail database. It also create 5Mb of files for every user as they logon. As we don&#8217;t even use Windows Mail, just Outlook for staff I wanted to disable it.</p>
<p>There appears to be no easy way to remove it from the system, but you can prevent it from setting up the details for every user when the log on.</p>
<p>Download and runs the <a href="http://technet.microsoft.com/en-gb/sysinternals/default.aspx">Microsoft Sysinternals</a> program <a href="http://technet.microsoft.com/en-gb/sysinternals/bb963902.aspx">Autoruns </a>as an Administrator and then under the <strong>Logon </strong>tab untick &#8220;Microsoft Windows&#8221; under both the <strong>Active Setup\Installed Components</strong> and the <strong>WOW6432Node\Active Setup\Installed Components</strong>.</p>
<p>Now when a new user logs in it will no longer set up Windows Mail files or shortcuts.</p>
<div id="attachment_128" class="wp-caption alignright" style="width: 310px"><a href="http://jrudd.org/wp-content/uploads/2010/02/WinMail-Disable.png" rel="lightbox[126]"><img class="size-medium wp-image-128" title="Autoruns Windows Mail Disable" src="http://jrudd.org/wp-content/uploads/2010/02/WinMail-Disable-300x232.png" alt="Autoruns Windows Mail Disable" width="300" height="232" /></a><p class="wp-caption-text">Autoruns Windows Mail Disable</p></div>
]]></content:encoded>
			<wfw:commentRss>http://jrudd.org/2010/02/windows-server-2008-r2-and-windows-mail/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Earth Zenworks Deployment</title>
		<link>http://jrudd.org/2009/02/google-earth-zenworks-deployment/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-earth-zenworks-deployment</link>
		<comments>http://jrudd.org/2009/02/google-earth-zenworks-deployment/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 04:26:02 +0000</pubDate>
		<dc:creator>James Rudd</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[AdminUser]]></category>
		<category><![CDATA[ChangeInstallDirForNonAdmin]]></category>
		<category><![CDATA[Condition]]></category>
		<category><![CDATA[deploy]]></category>
		<category><![CDATA[deployment program]]></category>
		<category><![CDATA[google earth]]></category>
		<category><![CDATA[InstallExecuteSequence]]></category>
		<category><![CDATA[InstallUISequence]]></category>
		<category><![CDATA[local settings]]></category>
		<category><![CDATA[MSI]]></category>
		<category><![CDATA[orca]]></category>
		<category><![CDATA[School]]></category>
		<category><![CDATA[Zenworks]]></category>

		<guid isPermaLink="false">http://jrudd.org/wordpress/?p=98</guid>
		<description><![CDATA[How to deploy Google Earth to C:\Program Files\Google\Google Earth instead of Local Settings\Application Data\Google\Google Earth by removing AdminUser checks from the MSI. <a href="http://jrudd.org/2009/02/google-earth-zenworks-deployment/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://earth.google.com/">Google Earth</a> is a great program for schools, as it allows teachers and students to explore the worlds geography and use layers to examine  history, socio-economic information and many other areas.</p>
<p>It used to be fairly easier to deploy on your network, but after version 4.2 it became significantly more difficult if you use a deployment program like Zenworks. A new MSI test was introduced to determine where to install Google Earth. If the current user is not an Admin User it would redirect to <em>[LocalAppDataFolder]Google\Google Earth</em> (usually C:\Documents and Settings\username\Local Settings\Application Data\Google\Google Earth) which made it inaccessible to other users.</p>
<p>As Zenworks uses the System account, which is not an admin user, this would happen when the installer was launched by a student.</p>
<p>To fix this problem there are a few different techniques. You can use either <a href="http://www.technipages.com/download-orca-msi-editor.html">ORCA </a>or Admin Studio Tuner (from Zenworks) to create a transform file that ignores these checks. Alternatively you can use ORCA to edit the msi file directly, I had to use this technique for V5 due to some exisiting problems in the Google Earth MSI.</p>
<p>First download the full version of Google Earth, (<a href="http://dl.google.com/earth/client/GE5/release_5_0/GoogleEarth-Win-Plus-5.0.11337.1968.exe">V5.0.11337</a>). You should be able to find later versions through Google.</p>
<p>To find what you need to edit you can do a search in ORCA for <em>AdminUser </em>you should find around 3 entries.</p>
<p>The major entries are:</p>
<ul>
<li><em>InstallExecuteSequence: ChangeInstallDirForNonAdmin: NOT AdminUser</em> (Delete this row)</li>
<li><em>InstallExecuteSequence: setALLUSERS: AdminUser</em> (remove the word AdminUser so it applies to all installs)</li>
<li><em>InstallUISequence: ChangeInstallDirForNonAdmin: NOT AdminUser</em> (Delete this row)</li>
</ul>
<p>You may also wish to remove <em>AdminUser </em>as a <em>Condition </em>from <em>Component: Plus_Registry_wavdest.ax</em></p>
<p>Once these are removed or modified it should install in C:\Program Files\Google\Google Earth regardless of which user is logged in.</p>
]]></content:encoded>
			<wfw:commentRss>http://jrudd.org/2009/02/google-earth-zenworks-deployment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

